繁体   English   中英

按日期/月份分组

[英]GROUP BY date/month

我有一个表,其中包含许多日期格式如下的交易:

January 1, 2016
September 9, 2016
September 13, 2016
August 8, 2017
August 9, 2017

当日期在中间时,我将如何将月份和年份分组在一起-它们是Varchar

这是一个棘手的问题。 我们可以通过以下方法来解决此问题:首先使用STR_TO_DATE将日期字符串转换为真实日期,然后使用DATE_FORMAT返回字符串以获取用于对数据进行分组的月份和年份。

SELECT
    DATE_FORMAT(STR_TO_DATE(date_col, '%M %e, %Y'), '%Y-%m') AS ym,
    SUM(some_col) AS sum_col
FROM yourTable
GROUP BY
    DATE_FORMAT(STR_TO_DATE(date_col, '%M %e, %Y'), '%Y-%m')

为了获得更好的长期解决方案,请考虑将文本日期存储在某种MySQL日期列类型中。 另一种选择是将日期存储在数值列中,以自该纪元以来的秒数为单位。 上面的查询虽然在逻辑上可能是正确的,但可能没有使用任何索引的机会,因此从性能的角度来看,您应尝试避免出现这种情况。

演示在这里:

右旋酯

GROUP BY DATE_FORMAT(record_date, '%Y%m')

参考链接

暂无
暂无

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

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