简体   繁体   中英

mysql - select count multiple tables, group by week, custom date range

For example, I have 2 tables and a date range (1 dec 2015 - 10 jan 2016).

First table: USERS

id (int)   date (datetime)
 1      3-dec-2015
 2      4-dec-2015
 3      19-dec-2015
 4      20-dec-2015
 5      21-dec-2015
 6      29-dec-2015
 7      30-dec-2015

Second table: BIRTHDAYS

id (int)   date (datetime)
 1      6-dec-2015
 2      8-dec-2015
 3      9-dec-2015
 4      17-dec-2015
 5      28-dec-2015

The result after the query should be the following:

[0] 1st week => 2 users, 1 birthday
[1] 2nd week => 0 users, 2 birthday
[2] 3ed week => 1 users, 1 birthday
[3] 4th week => 1 users, 0 birthday
[4] 5th week => 2 users, 1 birthday
[5] 6th week => 0 users, 0 birthday

Any ideas how to achive this result or something close? I can use and PHP if needed.

I would start off with something like this:

select ((week(dateb) - week('2015-12-01')) + 1) as week_number, count(a.dateb) as userdates 
from users as a
where dateb between '2015-12-01' and '2016-01-01'
group by week(dateb)
order by week(dateb);

and

select ((week(dateb2) - week('2015-12-01')) + 1) as week_number, count(dateb2) as birthdays 
from birthdays
where dateb2 between '2015-12-01' and '2016-01-01'
group by week(dateb2)
order by week(dateb2);

Demo, http://sqlfiddle.com/#!9/c83cb/21

from there you can fiddle with the outputting with PHP.

Also note with this approach only rows with populated data are returned. So you should check on the iteration that each row is incremented by 1.

eg so for users when you got from week 1 to week 3 you should output week 2 = 0 ; or however you want to display it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM