【问题标题】:Postgres max value per hour with time it occurredPostgres 每小时的最大值与它发生的时间
【发布时间】:2021-05-03 22:29:36
【问题描述】:

给定一个包含 highwater_datetime::timestamp 和 highwater::integer 列的 Postgres 表,我正在尝试为给定的 highwater_datetime 范围构建一个 select 语句,该语句生成具有每个小时的最大高水位列的行(第一次出现时dups)和另一列显示 highwater_datetime 发生时的时间(截断到分钟并按 highwater_datetime asc 排序)。例如

| highwater_datetime | max_highwater |
+--------------------+---------------+
| 2021-01-27 20:05   |             8 |
| 2021-01-27 21:00   |             7 |
| 2021-01-27 22:00   |             7 |
| 2021-01-27 23:00   |             7 |
| 2021-01-28 00:00   |             7 |
| 2021-01-28 01:32   |             7 |
| 2021-01-28 02:00   |             7 |
| 2021-01-28 03:00   |             7 |
| 2021-01-28 04:22   |             9 |

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    DISTINCT ON 应该可以解决问题:

    SELECT DISTINCT ON (date_trunc('hour', highwater_datetime))
           highwater_datetime,
           highwater
    FROM mytable
    ORDER BY date_trunc('hour', highwater_datetime),
             highwater DESC,
             highwater_datetime;
    

    DISTINCT ON 将根据ORDER BY 子句为每个具有相同小时的条目输出第一行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-15
      • 2015-07-04
      • 1970-01-01
      • 2018-09-17
      • 2020-05-11
      • 2021-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多