【问题标题】:Sql Group by datetimeSql 按日期时间分组
【发布时间】:2017-06-01 08:36:31
【问题描述】:

我有一个MySql 表:

+--------------------+----------------+
| datetime           | energy         |
+--------------------+----------------+
| 2010-06-15 10:00:00|               1|
| 2010-06-15 10:15:00|               3|
| 2010-06-15 10:30:00|               6|
| 2010-06-15 10:45:00|               7|
| 2010-06-15 11:00:00|               9|
| 2010-06-15 11:15:00|              12|
| 2010-06-15 11:30:00|              15|
| 2010-06-15 11:45:00|              28|
| 2010-06-15 12:00:00|              52|
| 2010-06-15 12:15:00|              75|
| 2010-06-15 12:30:00|              88|
| 2010-06-15 12:45:00|             102|
| 2010-06-15 13:00:00|             150|
| 2010-06-15 13:15:00|             189|
| 2010-06-15 13:30:00|             200|
| 2010-06-15 13:45:00|             205|
| 2010-06-15 14:00:00|             209|
| 2010-06-15 14:15:00|             400|
| 2010-06-15 14:30:00|             450|
| 2010-06-15 14:45:00|             480|
| 2010-06-15 15:00:00|             500|
+--------------------+----------------+

我将获得每小时的产量作为每小时的最大值和最小值之间的差:

示例:

第 10 小时的生产由 prod 给出。 11 小时(值 = 9)的产量减少 10 小时(值 = 1)-> 结果 = 8

预期结果

+--------------+----------------+
| datetime     | energy         |
+--------------+----------------+
| 2010-06-15 10|               8|
| 2010-06-15 11|              43|
| 2010-06-15 12|              98|
| 2010-06-15 13|              69|
| 2010-06-15 14|             291|
+--------------+----------------+

select max(energy) - min(energy) 
FROM tableA
group by hour(datetime)

此查询不起作用,因为在 10:45 和 10:00 之间产生差异(不是 11:00 和 10:00)

有什么建议吗?

【问题讨论】:

  • 你想要最大值和最小值之间的差异,还是一小时开始和下一小时开始之间的差异?
  • 能量总是在增加,所以它们是一回事吗?
  • 我想要最大值和最小值之间的差异,即使能量总是在增加,因为有时可能会丢失样本。

标签: mysql sql datetime group-by


【解决方案1】:

要获得每小时之间的差异,请使用自联接来关联相隔一小时的时间。

SELECT a.datetime, b.energy - a.energy AS energy
FROM tableA AS a
JOIN TableA AS b ON a.datetime = DATE_SUB(b.datetime, INTERVAL 1 HOUR)
WHERE MINUTE(a.datetime) = 0

DEMO

【讨论】:

  • 我需要最大值和最小值之间的差异,即使能量总是在增加,因为有时样本可能会丢失,我不确定每 XX:00 分钟有一次
  • 但是如果你想在第 10 小时达到最大值,为什么它会使用 11:00 的能量呢?那不是在同一时间。
  • 如果 10:45 高于 11:00 怎么办,你应该把它作为最大值吗?
  • 您能否更改您的示例以显示所有不同的情况,以及预期的结果应该是什么?
【解决方案2】:

缺少数据的示例

+--------------------------------+----------------+ |日期时间 |能源| +--------------------------------+----------------+ | 2010-06-15 10:00:00| 1| | 2010-06-15 10:45:00| 7| | 2010-06-15 11:00:00| 9| | 2010-06-15 11:15:00| 12| | 2010-06-15 11:30:00| 15| | 2010-06-15 11:45:00| 28| | 2010-06-15 12:15:00| 75| | 2010-06-15 12:30:00| 88| | 2010-06-15 12:45:00| 102| | 2010-06-15 13:00:00| 150| | 2010-06-15 13:15:00| 189| | 2010-06-15 13:30:00| 200| | 2010-06-15 13:45:00| 205| | 2010-06-15 14:00:00| 209| | 2010-06-15 14:15:00| 400| | 2010-06-15 14:30:00| 450| | 2010-06-15 14:45:00| 480| | 2010-06-15 15:00:00| 500| +--------------------------------+----------------+

在此示例中,缺少一些示例。

预期结果:

+--------------+----------------+ |日期时间 |能源| +--------------+----------------+ | 2010-06-15 10| 8| 11:00 至 10:00 | 2010-06-15 11| 17| 11:45 至 11:00 | 2010-06-15 12| 150| 13:00 至 12:15 | 2010-06-15 13| 69| 13:00 至 14:00 | 2010-06-15 14| 291| 14:00 至 15:00 +--------------+----------------+

我总是想按整小时分组: 包括从 10:00 到 11:00 包括从 11:00 到 12:00 包括从 12:00 到 13:00 电子表格.... immagine

【讨论】:

    猜你喜欢
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 2021-01-03
    • 2021-03-10
    • 2018-04-13
    相关资源
    最近更新 更多