Jag håller på att skapa en liten graf över hur många böcker jag har köpt under året, månadsvis. Grafen skall visa data för 6 månader åt gången (2 bakåt och 3 framåt).
Tabellen i fråga heter book och har bl a följande kolumner:
- id
- title
- author
- created_at (datumet jag har lagt in boken i registret och kan ses som köpsdatum)
Just nu har jag kommit fram till följande SQL-fråga:
SELECT
(SELECT count(*) FROM book WHERE created_at BETWEEN '2010-05-01 00:00:00' AND '2010-05-31 23:59:59'),
(SELECT count(*) FROM book WHERE created_at BETWEEN '2010-06-01 00:00:00' AND '2010-06-30 23:59:59'),
(SELECT count(*) FROM book WHERE created_at BETWEEN '2010-07-01 00:00:00' AND '2010-07-31 23:59:59')
FROM
book
WHERE
created_at > '0000-00-00'
LIMIT
1
Ovan stående fråga hämtar alltså data för tre månader.
WHERE-satsen måste jag ha då jag har lagt till created_at i senare stund och då får vissa rader i tabellen värdet '000-00-00 ...' som jag inte vill få med i resultatet.
Denna fråga verkar fungera men jag skulle gärna vilja förbättra den då just nu behövs LIMIT 1. Jag är inte helt säker på att min fråga är optimal.
SELECT count(*), MONTH(created_at), YEAR(created_at)
FROM
book
WHERE
created_at BETWEEN '2010-06-01' AND '2010-08-31'
GROUP BY MONTH(created_at), YEAR(created_at)
B
SELECT count(*), MONTH(created_at), YEAR(created_at)
FROM
book
WHERE
created_at BETWEEN '2010-12-01' AND '2011-02-28'
GROUP BY MONTH(created_at), YEAR(created_at)