基于年份的mysql数据组

pgky5nke  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(316)

我有个问题:

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,则不会重新运行数据。
有人能帮帮我吗。

g0czyy6m

g0czyy6m1#

问题出在你的 GROUP BY 条款。由于您是按月分组的,每个月的第一个数据是在2017年,因此 DATE_FORMAT(odd_date_created + INTERVAL -3 DAY,'%Y') 实际上,select几乎肯定会在2017年推出(尽管由于没有隐含订单,因此无法保证)。你需要 GROUP BY 年度,这样你就可以得到每年每个月的数据。然后您可以使用 HAVING . 请注意,您可以在中使用别名 GROUP BY 以及 HAVING 子句,因此可以将查询重写为:

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

请注意 status 以及 odd_date_created 在这个查询中是没有意义的,因为它们将从匹配 WHERE 以及 HAVING 条款。

相关问题