【问题标题】:Query records between two dates duration查询两个日期持续时间之间的记录
【发布时间】:2017-05-02 08:46:43
【问题描述】:

所以我只是在一个表中有start_timeend_timeduration 列。我想查询两个日期之间的数据。 (start_time 和 end_time 以纪元为单位)

因此,例如日期是 2016-12-052016-12-08。因此,为此,我还需要包含从 2016-12-04 开始但在 2016-12-05 之间结束并从 2016- 开始的记录12-08 并在 2016-12-09 结束。以及这些日期之间的所有记录。

我无法想出将查询确切数据的 WHERE 子句的组合。

我能得到的一个部分是这样的:

SELECT * FROM my_table 
    WHERE 
         date(datetime(start_time/1000, 'unixepoch', 'localtime')) >= '2016-12-05' 
    AND 
         date(datetime(start_time/1000, 'unixepoch', 'localtime')) <= '2012-12-08'

但这不会包括所有记录。

【问题讨论】:

    标签: android sqlite date android-sqlite


    【解决方案1】:

    您的逻辑似乎暗示如果开始或结束在范围内,则应将其视为匹配。如果是这样,那么以下查询应该可以工作:

    SELECT *
    FROM my_table 
    WHERE 
    (
        date(datetime(start_time/1000, 'unixepoch', 'localtime')) >= '2016-12-05' AND
        date(datetime(start_time/1000, 'unixepoch', 'localtime')) <= '2012-12-08'
    ) OR
    (
        date(datetime(end_time/1000, 'unixepoch', 'localtime')) >= '2016-12-05' AND
        date(datetime(end_time/1000, 'unixepoch', 'localtime')) <= '2012-12-08'
    )
    

    【讨论】:

    • 看起来它将包含 2 个给定日期之间的所有记录
    • 这就是我想要的。我去看看这个
    • @kirtan403 逻辑包括介于两者之间的日期。这些日期在范围内同时具有开始日期和结束日期,但只需要一个条件。
    • 我得到的是,所有的记录都是顺序的。意味着,在 1 个会话完成后,下一个会话的 start_time 总是大于最后一条记录的 end_time。不会有任何重叠。所以目前这对我来说似乎是正确的。
    • @kirtan403 如果您需要任何进一步的帮助,请告诉我们。
    猜你喜欢
    • 2014-02-11
    • 1970-01-01
    • 2014-08-05
    • 2018-11-23
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多