【问题标题】:How to filter based on date in certain cases in SQL?如何在 SQL 中的某些情况下根据日期进行过滤?
【发布时间】:2021-04-03 17:21:18
【问题描述】:

假设我有这样的数据:

 ID   GROUP               TIMESTAMP1    col_OTHER               TIMESTAMP2
001      AA  2021-04-02 15:02:33.319       mangos
002      BB                                 kiwis
004      AA  2021-04-02 03:51:35.279      oranges
003      DD  2021-04-03 18:24:23.469      oranges  2021-04-03 18:22:23.469 
003      DD                               bananas  2021-04-03 15:02:33.319
002      CC  2021-04-04 11:02:51.313       apples  2021-04-04 11:03:51.313 

所以我想只过滤 TIMESTAMP2TIMESTAMP1 之后的行。我们仅在 4 月 3 日开始收集 TIMESTAMP2 的数据,此后没有空值,但我们没有这之前的数据。所以我想在这个日期之后应用这个条件。

此外,我们有时在 TIMESTAMP1 中有空值,我认为我的 coalesce() 解决了这个问题...?

最终输出:

 ID   GROUP               TIMESTAMP1    col_OTHER               TIMESTAMP2
001      AA  2021-04-02 15:02:33.319       mangos
002      BB                                 kiwis
004      AA  2021-04-02 03:51:35.279      oranges 
003      DD                               bananas  2021-04-03 15:02:33.319
002      CC  2021-04-04 11:02:51.313       apples  2021-04-04 11:03:51.313 

这是我目前所拥有的:

SELECT * 
FROM dt
WHERE coalesce(TIMESTAMP1, '1970-01-01') < TIMESTAMP2 

我也很好奇如何删除我在 TIMESTAMP1 和 TIMESTAMP2 中都有 NULL 的实例

【问题讨论】:

  • 你的主键是什么?

标签: mysql date


【解决方案1】:

我认为这应该可行:

SELECT * 
FROM dt
WHERE COALESCE(TIMESTAMP1, '1970-01-01') < '2021-04-03'
   OR COALESCE(TIMESTAMP1, '1970-01-01') < TIMESTAMP2

或:

SELECT * 
FROM dt
WHERE COALESCE(TIMESTAMP1, '1970-01-01') < COALESCE(TIMESTAMP2, '2021-04-03')

请参阅demo
结果:

ID GROUP TIMESTAMP1 col_OTHER TIMESTAMP2
001 AA 2021-04-02 15:02:33.319 mangos null
002 BB null kiwis null
004 AA 2021-04-02 03:51:35.279 oranges null
003 DD null bananas 2021-04-03 15:02:33.319
002 CC 2021-04-04 11:02:51.313 apples 2021-04-04 11:03:51.313

【讨论】:

    【解决方案2】:

    这样的事情呢?

     SELECT * 
        FROM dt
        WHERE TIMESTAMP1 is not null and TIMESTAMP2 is not null and TIMESTAMP1 < TIMESTAMP2 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      • 2021-05-16
      • 2018-06-05
      • 2023-01-25
      • 1970-01-01
      • 2022-10-01
      • 1970-01-01
      相关资源
      最近更新 更多