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】:

selectgroup 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 列 - 按天分组的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Eloquent按天分组结果

MySQL按天计数和分组

在 BigQuery 中获取按天分组的最大数量的唯一 ID

[Mysql] GroupBy 分组,按天周月

MySql 累计总数按天分组在最大总数上

MySQL实现按天分组统计,提供完整日期列表,无数据自动补0