根据年份分组MySQL数据

时间:2018-04-27 23:17:24

标签: php mysql codeigniter-3

我有这个问题:

SELECT DATE_FORMAT(odd_date_created + INTERVAL -3 DAY, '%Y') AS `year`
       , DATE_FORMAT(odd_date_created + INTERVAL -3 DAY, '%b') AS `month`
       , COUNT(odd_Id) as total, status, odd_date_created FROM odd_data
WHERE status = 1
GROUP BY DATE_FORMAT(odd_date_created + INTERVAL -3 DAY, '%m')
   HAVING DATE_FORMAT(odd_date_created + INTERVAL -3 DAY,'%Y') = 2018

$ yearToDate将从选择下拉列表中动态生成。当用户选择2017时,设法获取数据,但如果选择2018则没有数据重新启动。

有人可以帮助我。

1 个答案:

答案 0 :(得分:1)

问题在于您的GROUP BY条款。由于您按月分组并且每个月的第一个数据是在2017年,因此选择中DATE_FORMAT(odd_date_created + INTERVAL -3 DAY,'%Y')的值几乎肯定会(尽管由于没有暗示订单而无法保证)是2017年。您还需要GROUP BY年,以便获得每年每月的数据。然后,您可以使用HAVING选择特定年份。请注意,您可以在GROUP BYHAVING子句中使用别名,因此您可以将查询重写为:

SELECT DATE_FORMAT(odd_date_created + INTERVAL -3 DAY, '%Y') AS `year`,
       DATE_FORMAT(odd_date_created + INTERVAL -3 DAY, '%b') AS `month`,
       COUNT(odd_Id) as total, status, odd_date_created FROM odd_data
WHERE status = 1
GROUP BY year, month
HAVING year = 2018

请注意,在此查询中使用statusodd_date_created是没有意义的,因为它们将从符合WHEREHAVING子句的条目集中返回随机值。< / p>