【问题标题】:How to find entry that is between two dates?如何找到两个日期之间的条目?
【发布时间】:2021-07-14 16:58:06
【问题描述】:

我有一张桌子:

Id start_timestamp end_timestamp
1 2021-07-12 03:00:00   2021-07-13 11:58:05 
2 2021-07-13 04:00:00 2021-07-13 05:00:00
3 2021-07-13 04:00:00 2021-07-13 09:00:00
4 2021-07-13 04:00:00 NULL
5 2020-04-10 04:00:00 2020-04-10 04:01:00

....

我想查找位于两个特定时间戳之间的所有记录?基本上我想了解在一天中的高挑选时间运行了什么进程(不管他们在窗口中有 1 秒还是几个小时......只要在窗口中发生就足够了)

所以如果时间戳是 2021-07-13 00:00:002021-07-13 04:30:00 查询将返回

1
2
3
4

如何使用 SQL 做到这一点? (最好是 Presto)

【问题讨论】:

    标签: sql presto


    【解决方案1】:

    这是重叠范围问题。您可以使用:

    SELECT *
    FROM yourTable
    WHERE
        (end_timestamp > '2021-07-13 00:00:00' OR end_timestamp IS NULL) AND
        (start_timestamp < '2021-07-13 04:30:00' OR start_timestamp IS NULL);
    

    我的回答假设表中缺少的开始/结束时间戳值在逻辑上意味着不应考虑该值。这似乎是您想要的逻辑。

    【讨论】:

    • 但这也会给我从 2021-07-14 0:00:00 开始的超出范围的记录
    • 澄清一下,您是要检测自定义范围的重叠,还是要检测自定义范围是否完全包含在表中的两个时间戳中?如果您想要 former (这就是您的示例数据似乎所说的),那么我的答案已经是正确的。
    • 只要记录在范围内就足够了(范围内的持续时间无关紧要)。澄清日志 end_timestamp 是否为 2021-07-12 03:00:01 并且查询 start_timestamp 是否为 2021-07-12 03:00:00 - 记录应显示在结果中
    猜你喜欢
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    相关资源
    最近更新 更多