【问题标题】:Getting all rows between two timestamps获取两个时间戳之间的所有行
【发布时间】:2013-11-28 05:11:23
【问题描述】:

我很难让这个逻辑恰到好处。我需要获取在两个 unix 时间戳之间匹配的所有行。

在此示例中,预订 #1 已存在于数据库中。预订 #2 的时间应该返回预订 #1 的数据,但它不是这样工作的。

谁能告诉我哪里出错了?

booking #1 start = 1385546460 = 11 / 27 / 13 @ 10:01:00am UTC
booking #1 stop  = 1385593140 = 11 / 27 / 13 @ 10:59:00pm UTC

booking #2 start = 1385560860 = 11 / 27 / 13 @ 2:01:00pm UTC
booking #2 stop  = 1385567940 = 11 / 27 / 13 @ 3:59:00pm UTC

SELECT
  t1.start
, t1.stop
, t1.booking_id
FROM booking AS t1
WHERE t1.location_id = 1 AND
(t1.start BETWEEN '1385560860' AND '1385567940' OR t1.stop  BETWEEN '1385560860' AND '1385567940')

【问题讨论】:

    标签: mysql


    【解决方案1】:

    Booking 1 的运行时间约为 10:00 至 22:00,而 Booking 2 的运行时间约为 14:00 至 16:00,因此 Booking 1 的两端当然不会出现在 Booking 2 的两端之间。

    我认为您正在寻找计算闭合区间的重叠:

    WHERE t1.start <= t2.stop
          AND
          t1.stop  >= t2.start
    

    该公式将按照人们通常的想法得到重叠的范围。看下图,会发现A、B、C、D与“Window”重叠,而E、F则没有。

    (time) ==========================>
    
    Window:      |-------|
         A: |-----|
         B:        |--|
         C:   |------------|
         D:          |-------|
         E:  |-|
         F:                 |-----|
    

    【讨论】:

    • 感谢您让我明白这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 2011-04-26
    • 2014-05-22
    • 2018-01-13
    • 2023-02-24
    • 1970-01-01
    相关资源
    最近更新 更多