MySQL TIMESTAMP 列 - 按天分组
Posted
技术标签:
【中文标题】MySQL TIMESTAMP 列 - 按天分组【英文标题】:MySQL TIMESTAMP Column - Group by Day 【发布时间】:2017-11-04 19:47:05 【问题描述】:在没有任何特定 where 子句的情况下,我正在努力按天对 mysql TIMESTAMP 列进行分组。
目标是在数据库中输出单个日期的列表,目前我收到关于非聚合列的错误。
SELECT 列表不在 GROUP BY 子句中,并且包含非聚合列
created_at
,它在功能上不依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by 不兼容。
我的查询是:
SELECT created_at FROM audits GROUP BY DATE('created_at');
【问题讨论】:
【参考方案1】:在select
和group by
中都使用date()
。或者直接使用select distinct
:
SELECT DISTINCT DATE(created_at)
FROM audits;
我应该注意到您的查询有两个错误。表达式DATE('created_at')
采用字符串的DATE()
值。在这种情况下,date()
返回NULL
,这没有用。
即使您删除单引号(这可能是发布的人工制品),您仍然会收到您声明的错误。 SELECT DISTINCT DATE(created_at)
或 SELECT DATE(created_at)
/GROUP BY
将解决这个问题。
【讨论】:
【参考方案2】:在您当前的查询中,不需要 group by,因为您没有使用 sum 或 count 函数。我认为您当前将日期时间存储在 created_at 字段中。您想要的是将其转换为类似于'CAST(created_at AS date)的日期格式。这给了你没有时间的日子。完整查询:
Select CAST(created_at AS Date) AS New_Date FROM audits
【讨论】:
【参考方案3】:您可以尝试以下查询:
SELECT created_at FROM audits GROUP BY date_format('created_at','%d');
SELECT date_format('created_at','%d')as created_at_month,count(*) FROM audits GROUP BY date_format('created_at','%d');
similarly use
// for year : '%Y'
// for month : '%m'
// for hour : '%H'
【讨论】:
以上是关于MySQL TIMESTAMP 列 - 按天分组的主要内容,如果未能解决你的问题,请参考以下文章