SQL:为多个记录选择下一个可用日期

时间:2018-02-17 09:28:17

标签: sql oracle

我有一个oracle DB 我的表格包含IDDATE列(以及更多) 我想在特定日期之后为每个ID选择下一个可用记录。对于只有一个ID,查询将是:

SELECT * FROM my_table
WHERE id = 1 AND date >= '01.01.2018'

(只是忽略to_date()功能)

多个ID的外观如何?我确实想要SELECT *

谢谢!

1 个答案:

答案 0 :(得分:1)

我们可以在这里使用ROW_NUMBER

SELECT ID, date  -- and maybe other columns
FROM
(
    SELECT *,
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY date) rn
    FROM my_table
    WHERE date >= date '2018-01-01'
) t
WHERE rn = 1

这里的想法是为每个ID分区分配一个行号,从您指定的截止值之后的最早日期开始。假设它存在,那么每个分区的第一条记录将是紧接的下一个日期。