简体   繁体   English

mysql | 计算按时间分组的记录

[英]mysql | count records grouped by time

I have a code to get array of dates (This month - 12): 我有一个代码来获取日期数组(本月-12):

for ($i = 0; $i <= 11; $i++) {
    $months[] = date("Y-m", strtotime( date( 'Y-m-01' )." -$i months"));
}

To get records from DB by specified month I can use the code below: 要按指定月份从数据库获取记录,我可以使用以下代码:

$sql = 'SELECT COUNT(id) FROM `#__records` WHERE MONTH(date)=1 AND YEAR(date)=2010';

Hot to create my request to get data by each month? 是否热衷于创建我的按月获取数据的请求? Thanks! 谢谢!

Try this 尝试这个

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);

You can do this directly in SQL with an appropriate GROUP BY query. 您可以使用适当的GROUP BY查询直接在SQL中执行此操作。

The trick is this little expression. 窍门就是这个小表情。 Given any DATE or DATETIME`, it yields the first day of the month. 给定任何DATE或DATETIME`,它将产生该月的第一天。

DATE(DATE_FORMAT(datevalue, '%Y-%m-01'))

The query uses that formula a lot to figure things out. 查询大量使用该公式来解决问题。

Try this: 尝试这个:

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'))

This gives back one row for each of the most recent twelve months. 最近十二个月的每一个月都返回一排。

Here's a more extensive writeup on this kind of summary query. 这是有关这种摘要查询的更详尽的文章。 http://www.plumislandmedia.net/mysql/sql-reporting-time-intervals/ http://www.plumislandmedia.net/mysql/sql-reporting-time-intervals/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM