我有一个oracle DB
我的表格包含ID
和DATE
列(以及更多)
我想在特定日期之后为每个ID选择下一个可用记录。对于只有一个ID
,查询将是:
SELECT * FROM my_table
WHERE id = 1 AND date >= '01.01.2018'
(只是忽略to_date()
功能)
多个ID的外观如何?我确实想要SELECT *
。
谢谢!
答案 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
分区分配一个行号,从您指定的截止值之后的最早日期开始。假设它存在,那么每个分区的第一条记录将是紧接的下一个日期。