统计日期范围内的天数

Posted

技术标签:

【中文标题】统计日期范围内的天数【英文标题】:Count totals for days within date range 【发布时间】:2012-02-14 17:30:40 【问题描述】:

我想计算任何给定(用户选择的)日期范围,从 StartDate (sDate) 到 EndDate (eDate) 的所有星期一、星期二等的总数。我当前的查询显示范围内的所有天,我希望它从每一天开始对我的表“计数”求和,但将一周中每一天的总数显示为一次。使用图像样本,我希望我的结果是: 星期一 - 164 星期二 - 139 星期三 - 261 等等

SQL

SELECT areaname,created, SUM(count) as totals FROM reports WHERE created 
between '".$sDate."'  AND  '".$eDate."' AND area = '".$tArea."' GROUP BY areaname, 
created ORDER BY id ASC

html

foreach ($counts as $row)  ?>
<tr><td><?php echo date('l',strtotime($row['reports']['created'])); ?></td>
<?php echo $row[0]['totals']; ?>

【问题讨论】:

【参考方案1】:

您可以使用DATE_FORMAT() 函数从给定日期获取星期几,然后您可以按该日期分组。语法为DATE_FORMAT(date, '%W')。所以:

SELECT areaname,
  DATE_FORMAT(created, '%W') AS weekday,
  SUM(count) AS totals
FROM reports
WHERE created BETWEEN '".$sDate."' AND '".$eDate."'
  AND area = '".$tArea."'
GROUP BY areaname, weekday
ORDER BY id

请注意,我在 GROUP BY 中保留了 areaname,因此这将为 areaname/weekday 的每个组合返回一个结果。如果您想要所有区域名称的总数,只需从 GROUP BY 子句中删除 areaname

【讨论】:

完美。那太棒了。谢谢!

以上是关于统计日期范围内的天数的主要内容,如果未能解决你的问题,请参考以下文章

选择日期范围内的特定日期

查找给定日期范围内的工作日/周末数

pb 数据窗口是否包含指定范围内的日期

检查日期范围与其他一些日期范围的缺失天数

日期范围内给定年份的天数

从日期范围生成天数