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

时间:2014-10-23 11:54:56

标签: php mysql datetime aggregate-functions

我有一个代码来获取日期数组(本月 - 12):

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

要在指定月份从DB获取记录,我可以使用以下代码:

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

热门创建我每个月获取数据的请求? 谢谢!

2 个答案:

答案 0 :(得分:1)

试试这个

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

答案 1 :(得分:0)

您可以使用适当的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/