【问题标题】:Count of birthdays for next 7 days and need count for each day and total未来 7 天的生日计数以及每天的生日计数和总数
【发布时间】:2015-05-21 05:31:21
【问题描述】:

我在这个网站上看到过这样的问题;但他们只是给出生日数据而不给出计数 喜欢: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 '%-03-20' 计数不同的地方是不正确的。

提前谢谢你。

【问题讨论】:

  • 为什么不在查询末尾添加group by day
  • 添加了...你可以查看@Avidan
  • 一定要测试你的查询 CURDATE() '2014-12-24' 和 '2016-02-24' 的值,以确保你已经处理了年终和跨越-年份案例正确。这东西比看起来更难!
  • 谢谢,不过我知道闰年的情况不会影响。我必须添加另一个条件,比如如果月份日期是 03-28,那么发送日期可能是 03-30 到 04-06,所以这个条件也不满足。

标签: php mysql sql phpmyadmin


【解决方案1】:

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

该子查询就是这样,满足您第 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)

这应该会给你正确的计数。

在这类工作中使用数值范围极易出错。

【讨论】:

    猜你喜欢
    • 2011-08-21
    • 2010-11-13
    • 1970-01-01
    • 2018-02-01
    • 2013-09-16
    • 2015-12-11
    • 2012-03-24
    • 1970-01-01
    • 2021-09-11
    相关资源
    最近更新 更多