Postgresql
如何按postgresql中日期列的第n個最小值/最大值選擇記錄?
我有一張如下表:
create table x(id int, work date);
該表有以下記錄:
insert into x values(1,'2017-01-01'),(2,'2017-01-01'),(3,'2017-02-02'),(4,'2017-01-15'),(5,'2017-01-15');
現在,我想選擇具有第一個、第二個和第三個日期值的記錄。
我想要的輸出如下:
如果我想選擇具有第一個日期值的記錄,那麼輸出將是:
id work 1 2017-01-01
如果我選擇帶有第二個日期值的記錄,那麼輸出將是:
id work 4 2017-01-15
任何幫助在高級表示讚賞。
使用視窗函式:
select id, work from ( select id, work, row_number() over (order by work) as rn from x ) t where rn = 1 -- or 2 or 3 ...
如果您需要處理重複的日期,請使用
dense_rank()
而不是row_number()
使用第二個視窗函式來為每個日期提供數字:select id, work from ( select id, work, dense_rank() over (order by work) as rn, row_number() over (partition by work order by id) as rn2 from x ) t where rn = 2 -- second highest date value and rn2 = 1 -- first date with the second highest date value