mysql |按时间分组计数记录
Posted
技术标签:
【中文标题】mysql |按时间分组计数记录【英文标题】:mysql | count records grouped by time 【发布时间】:2014-12-19 02:01:04 【问题描述】:我有一个获取日期数组的代码(本月 - 12 日):
for ($i = 0; $i <= 11; $i++)
$months[] = date("Y-m", strtotime( date( 'Y-m-01' )." -$i months"));
要在指定月份从数据库中获取记录,我可以使用以下代码:
$sql = 'SELECT COUNT(id) FROM `#__records` WHERE MONTH(date)=1 AND YEAR(date)=2010';
创建按月获取数据的请求很热门吗? 谢谢!
【问题讨论】:
【参考方案1】:您可以使用适当的GROUP BY
查询直接在 SQL 中执行此操作。
诀窍就是这个小表情。给定任何 DATE 或 DATETIME`,它会产生该月的第一天。
DATE(DATE_FORMAT(datevalue, '%Y-%m-01'))
查询大量使用该公式来解决问题。
试试这个:
SELECT COUNT(id) AS idcount,
DATE(DATE_FORMAT(date, '%Y-%m-01')) AS month_beginning
FROM table
WHERE date >= DATE(DATE_FORMAT(NOW(), '%Y-%m-01')) - INTERVAL 12 MONTH
AND date < DATE(DATE_FORMAT(NOW(), '%Y-%m-01')) + INTERVAL 1 MONTH
GROUP BY DATE(DATE_FORMAT(date, '%Y-%m-01'))
ORDER BY DATE(DATE_FORMAT(date, '%Y-%m-01'))
这会为最近十二个月的每一个月返回一行。
这里有关于这种摘要查询的更广泛的文章。 http://www.plumislandmedia.net/mysql/sql-reporting-time-intervals/
【讨论】:
如果你尝试SELECT id, DATE(DATE_FORMAT(date, '%Y-%m-01')) FROM table
,你会得到什么?你得到正确的月初日期吗?另外,也许你应该在反引号中包含列名date
,因为它是一个保留字。【参考方案2】:
试试这个
for ($i = 0; $i <= 11; $i++)
$months[] = date("Y-m", strtotime( date( 'Y-m-01' )." -$i months"));
$count = sizeof($months);
for($i=0;$i<$count;$i++)
$sql = 'SELECT COUNT(id) AS id FROM `#__records` WHERE MONTH(date)='".$months[$i]."' AND YEAR(date)=2010';
$result = mysql_query($sql);
if($result)
$data_array = array();
$data = mysql_fetch_assoc($result);
if($data)
$data_array[] = array($data['id']);
print_r($data_array);
【讨论】:
以上是关于mysql |按时间分组计数记录的主要内容,如果未能解决你的问题,请参考以下文章