Postgresql

如何按postgresql中日期列的第n個最小值/最大值選擇記錄?

  • February 11, 2017

我有一張如下表:

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

線上範例:http ://rextester.com/VQVTB53094

引用自:https://dba.stackexchange.com/questions/163979