接下来7天的生日数量,需要计算每天和总数

时间:2015-03-18 12:21:53

标签: php mysql sql phpmyadmin

我在这个网站上看到过这样的问题;但他们只是给生日数据而不算数 喜欢:mysql query to get birthdays for next 10 days

SQL Select Upcoming Birthdays

这里我想要的是即将到来的9天每天的生日数  从2天后:例如今天是03-18,所以我想发送03-20到03-26的数据

这是我的查询

SELECT count(DOB) as count,DAYOFMONTH(DOB) as day 
from patient 
where 
    day(DOB) >= day(DATE_ADD(CURDATE(), interval 2 day)) 
and day(DOB) < day(DATE_ADD(CURDATE(), interval 9 day)) 
and  month(DOB) < month(DATE_ADD(CURDATE(), interval 1 month))
group by day
ORDER BY day ASC

它提供的输出如下:

count   date
2444    03-20

2337    03-21

2354    03-22

2064    03-23

2118    03-24

2357    03-25

2181    03-26

但根据我查询DOB LIKE&#39;% - 03-20&#39;伯爵不同。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

这样做的一个好方法是生成一个子查询,其中包含这些生日的适当日期。这很好,因为它可以在一年中和每年翻转工作。

这个子查询就是这个,因为你需要第2到第9天。

          SELECT MONTH(CURDATE()+INTERVAL 2+n DAY) mn, 
                 DAYOFMONTH(CURDATE()+INTERVAL 2+n DAY) dy
           FROM (
                   SELECT 0 n UNION ALL SELECT 1 UNION ALL
                   SELECT 2 UNION ALL SELECT 3 UNION ALL 
                   SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 
                ) seq

然后,您可以将该结果加入到您的出生日期列表中,并总结如下。

SELECT COUNT(*), MONTH(p.DOB) birthday_month, DAYOFMONTH(p.DOB) birthday
  FROM patient p
  JOIN (
          SELECT MONTH(CURDATE()+INTERVAL 2+n DAY) mn, 
                 DAYOFMONTH(CURDATE()+INTERVAL 2+n DAY) dy
           FROM (
                   SELECT 0 n UNION ALL SELECT 1 UNION ALL
                   SELECT 2 UNION ALL SELECT 3 UNION ALL 
                   SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 
                ) seq
       ) d ON MONTH(p.DOB) = d.mn AND DAYOFMONTH(p.DOB) = d.dy
  GROUP BY MONTH(p.DOB), DAYOFMONTH(p.DOB)
  ORDER BY MONTH(p.DOB), DAYOFMONTH(p.DOB)

这应该给你正确的计数。

使用这种工作的数值范围非常容易出错。