【问题标题】:MySQL TIMESTAMP Column - Group by DayMySQL TIMESTAMP 列 - 按天分组
【发布时间】: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');

【问题讨论】:

    标签: mysql sql


    【解决方案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'

        【讨论】:

          猜你喜欢
          • 2011-09-29
          • 1970-01-01
          • 2012-05-10
          • 1970-01-01
          • 2021-12-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多