首页 > 解决方案 > 创建最小值和最大值并将它们与时间戳值 sql 进行比较

问题描述

我有一个 PostgreSQL 数据库,并且我有一个表,我希望查询该表以确定在第一个周期 created_timestamp 和最近的周期 created_timestamp 之间更新了哪些印刷机。这是一个名为 event_log_summary 的表的示例。

press_id    cycle_number    created_timestamp
    1           1           2020-02-07 16:07:52
    1           2           2020-02-07 16:07:53
    1           3           2020-02-07 16:07:54
    1           4           2020-04-01 13:23:10
    2           1           2020-01-13 8:33:23
    2           2           2020-01-13 8:33:24
    2           3           2020-01-13 8:33:25
    3           1           2020-02-21 18:45:44
    3           2           2020-02-21 18:45:45
    3           3           2020-02-26 14:22:12

这是我用来获取 press_id、mincycle、max_cycle 的三列输出的查询,但是我想将 maxcycle created_timestamp 与 mincycle created_timestamp 进行比较,看看两者之间是否至少有 x 时间,比如说至少 1 天,我不确定如何实施。

SELECT 
    press_id,
    MIN(cycle_number) AS minCycle,
    MAX(cycle_number) AS maxCycle
FROM
    event_log_detail
GROUP BY
    press_id

我尝试了不同的方法,例如使用 WHERE (MAX(cycle_number) - MIN(cycle_number > 1),但我对 SQL 很陌生,并不完全知道如何实现这一点。我正在寻找的输出将有一个至少一天的差异如下:

press_id
    1
    3

印刷机 1 和 3 的最大周期 created_timestamp 比它们的最小周期 created_timestamp 至少相差 1 天。我只是在寻找第一个周期和最后一个周期至少相差 1 天的 press_ids,我不需要关于输出的任何其他信息,只需要一个带有 press_ids 的列。任何帮助,将不胜感激。谢谢。

标签: sqlpostgresqlgroup-bydate-arithmetic

解决方案


您可以使用 HAVING 子句:

select press_id, 
       max(created_timestamp) - min(created_timestamp) as diff
from event_log_detail
group by press_id
having max(created_timestamp) > min(created_timestamp) + interval '1 day';

推荐阅读