【问题标题】:End date with null value :db2-sql空值结束日期:db2-sql
【发布时间】:2021-12-27 15:12:37
【问题描述】:

我有一张桌子 my_date

id 开始 END 1 2021-01-13 2021-04-15 1 2021-04-16 2021-11-28 1 2021-11-29 空 2 2021-05-05 2021-09-13 2 2021-09-13 2021-12-31 3 2020-01-09 2021-08-29 3 2021-08-30 2023-04-15

我想选择具有 max(end) id 开始 END 2 2021-09-13 2021-12-31

【问题讨论】:

  • 根据描述你的结果是错误的。应该是下一行2 - 2021-09-13 - 2021-12-31
  • @-Implaer 。是的,我会纠正它
  • max (end_dt) = 2021-11-28 for id = 1 也小于 2021-12-31。为什么我们在输出中看不到相应的行?
  • 1 2021-04-16 2021-11-28 我不想要,因为 id 1 有另一条记录 1 2021-11-29 null 那 null 被认为是开放日期

标签: sql db2


【解决方案1】:

您可以按日期限制过滤,然后按日期降序排列,最后只检索第一行。

例如:

select *
from t
where end <= date '2021-12-31'
order by end desc
fetch next 1 rows only

结果:

ID  START       END
--  ----------  ----------
 2  2021-09-13  2021-12-31

请参阅db<>fiddle 的运行示例。

【讨论】:

    【解决方案2】:

    试试这个:

    SELECT id, Start, END
    FROM
    (
    SELECT *
    , ROW_NUMBER () OVER (PARTITION BY ID ORDER BY Start DESC) AS RN_
    FROM
    (
    VALUES
      (1, '2021-01-13', '2021-04-15')
    , (1, '2021-04-16', '2021-11-28')
    , (1, '2021-11-29', null)
    , (2, '2021-05-05', '2021-09-13')
    , (2, '2021-09-13', '2021-12-31')
    , (3, '2020-01-09', '2021-08-29')
    , (3, '2021-08-30', '2023-04-15')
    ) T (id, Start, END)
    ) T
    WHERE RN_ = 1 AND END <= '2021-12-31'
    

    dbfiddle link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-01
      • 1970-01-01
      • 2012-10-13
      • 2016-05-07
      • 1970-01-01
      相关资源
      最近更新 更多