I have a table with records that look like this:
CREATE TABLE sample (
ix int unsigned auto_increment primary key,
start_active datetime,
last_active datetime
);
I need to know how many records were active on each of the last 30 days. The days should also be sorted incrementing so they are returned oldest to newest.
I’m using MySQL and the query will be run from PHP but I don’t really need the PHP code, just the query.
Here’s my start:
SELECT COUNT(1) cnt, DATE(?each of last 30 days?) adate
FROM sample
WHERE adate BETWEEN start_active AND last_active
GROUP BY adate;
Do an outer join.
No table? Make a table. I always keep a dummy table around just for this.
Now make it convenient to use, and limit it to 30 days, with a view:
Edit: JR Lawhorne notes:
Thanks JR!
Now use this in your query (I haven’t actually tested your query, I’m just assuming it works correctly):
Edit: I should be joining the other way: