统计日期范围内的天数
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
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
。
【讨论】:
完美。那太棒了。谢谢!以上是关于统计日期范围内的天数的主要内容,如果未能解决你的问题,请参考以下文章