我正在努力按日分组MySQL TIMESTAMP列而没有任何特定的where子句。
目标是输出数据库中的单个日期列表,目前我收到有关非聚合列的错误。
SELECT列表不在GROUP BY子句中,并且包含非聚合列
created_at
,它在功能上不依赖于GROUP BY子句中的列;这与sql_mode = only_full_group_by不兼容。
我的查询是:
SELECT created_at FROM audits GROUP BY DATE('created_at');
答案 0 :(得分:1)
在date()
和select
中使用group by
。或者只使用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
将解决该问题。
答案 1 :(得分:0)
在当前查询中,没有必要的组,因为您没有使用sum或count函数。我认为您目前的日期时间存储在created_at字段中。你想要的是将其转换为类似'CAST(created_at AS date)之类的日期格式。这给你没有时间的日子。完整查询:
Select CAST(created_at AS Date) AS New_Date FROM audits
答案 2 :(得分:0)
您可以尝试以下查询:
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'