【问题标题】:How to count total number of record for each 7 days in mysql如何计算mysql中每7天的记录总数
【发布时间】:2016-03-26 07:26:05
【问题描述】:

我尝试从数据库中获取数据,从今天开始计算总数并自动减少 1 天并计数 7 次。它会显示为

Monday    = 5
Tuesday   = 2
Wednesday = 6
Thursday  = 4
Friday    = 7
Saturday  = 1
Sunday    = 5

问题是当我使用下面的查询时

SELECT count(*), ad_date 
  FROM advertise
 WHERE ad_date >=ad_date(day,datediff(day,0,GetDate())- 7,0)

显示错误:

调用本机函数“datediff”时参数计数不正确

那么这个或任何替代查询的问题是什么?

我的日期表的格式是使用时间戳。

2016-03-23 14:27:28 
2016-03-25 18:27:28 
2016-03-26 18:27:28`

【问题讨论】:

  • 您可能需要重新阅读 MySQL 的 datediff() documentation 而不是 SQL Server 的文档。它们有不同的参数。
  • 您在下面的 cmets 中描述的解决方案似乎使用了循环。表现一定很不理想。如果是这样,请考虑修改您的问题以包含代表性数据和期望的结果。

标签: php mysql counting


【解决方案1】:

datediff 只有两个参数

DATEDIFF(date1,date2)

  1. 您想从哪里开始的开始日期
  2. 结束日期

替换:

datediff(day,0,GetDate())- 7,0)

与:

DATE(DATE_SUB(NOW(),INTERVAL 7 DAY),GetDate())

更新答案(试试这个):

SELECT COUNT(1)
FROM table_name
WHERE created_date > (NOW() - INTERVAL 7 DAY)
Group by created_date

【讨论】:

  • 如果更改为 SELECT count(*), ad_date FROM Advertisement WHERE ad_date >=DATE(DATE_SUB(NOW(),INTERVAL 7 DAY)) 输出将显示表中的总数和最旧的日期表。
  • 目前我需要统计每天的总天数,是否可以在查询中使用for循环?
  • 亲爱的,我只回答了您显示的错误。如果您需要结果,请不要使用 for 循环使用子查询。让我来帮你。
  • 我用了一个循环,执行了7次,每次间隔1天并增加天数,问题解决了。谢谢大家的帮助。
  • 如果我们现在有星期六 12:00,那么 created_date > (NOW() - INTERVAL 7 DAY) 也将匹配上星期六 14:00。我不知道OP是否想要那个。如果没有,您可以将条件重写为date(ad_date) > CURRENT_DATE() - INTERVAL 7 DAY 或类似ad_date >= timestamp(date(CURRENT_DATE() - INTERVAL 6 DAY), '00:00:00') 的内容,以便可以使用索引。
猜你喜欢
  • 2012-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
  • 1970-01-01
  • 2014-11-07
  • 2016-08-23
  • 1970-01-01
相关资源
最近更新 更多