【问题标题】:SQL distinct on Date and ignore TimeSQL 在日期上不同并忽略时间
【发布时间】:2014-11-20 09:57:02
【问题描述】:

我希望仅根据Dates 区分下表,同时取平均值。有办法吗?

SELECT DISTINCT DATE_FORMAT(Date, '%Y-%m-%d'),
      AVG(value) AS Timestamp 
FROM abc GROUP BY Date

表 abc

+--------------------+-------+
| Date               | value |
+--------------------+-------+
| 18-Nov-2013 12:34  |   5   |
| 19-Nov-2013 14:45  |   4   |
| 20-Nov-2013 15:11  |   3   |
| 21-Nov-2013 08:33  |   2   |
| 21-Nov-2013 11:11  |   7   |
| 21-Nov-2013 15:15  |   8   |
+--------------------+-------+

【问题讨论】:

  • (我的)sql中的日期遵循特定格式
  • 你的意思是表结构吗?如果是,我需要表中的时间,但只需要其中一个查询来忽略时间。
  • 没有。我的意思是您可以考虑花一点时间来了解 SQL 中数据类型的重要性。

标签: mysql sql


【解决方案1】:

你可以这样做:

SELECT DATE_FORMAT(Dat, '%Y-%m-%d') AS dt,
       Avg(val)                     AS Timestamp
FROM   abc
GROUP  BY dt 

你可以group by 通过使用它在 MySQL 中的别名来评估列,就像我在上面的查询中所做的那样。像 SQL Server 这样的一些 DBMS 不允许这样的 SQL,所以在这种情况下,您可以使用子查询或按函数分组,例如:

SELECT dt,
       Avg(val)
FROM   (SELECT DATE_FORMAT(Dat, '%Y-%m-%d') AS dt,
               val
        FROM   abc) t
GROUP  BY dt 

SELECT DATE_FORMAT(Dat, '%Y-%m-%d') AS datetime,
       Avg(val)                     AS Timestamp
FROM   abc
GROUP  BY DATE_FORMAT(Dat, '%Y-%m-%d')

sqlfiddle

【讨论】:

  • 是的.. 有很多方法可以做到这一点。它也和SELECT DATE(Date) AS Timestamp, AVG(value) FROM abc GROUP BY DATE(Date).. 一样。
【解决方案2】:

您需要使用 GROUP 功能

SELECT DATE_FORMAT(Date, '%Y-%m-%d') AS Timestamp, AVG(value)
FROM abc
GROUP BY DATE(Date)

【讨论】:

  • 呜呜呜你是我的救星,这里的解决方案是GROUP BY DATE(Date)
猜你喜欢
  • 1970-01-01
  • 2017-12-07
  • 2015-06-30
  • 2016-03-15
  • 2016-02-14
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多