2017-05-27 82 views
0

對不起我只是沒有做橫向連接!PostgreSQL橫向連接到極限組

我有這樣的一個表:

ID | NUMBER | VALUE 
------------------- 
20 | 12  | 0.7 
21 | 12  | 0.8 
22 | 13  | 0.8 
23 | 13  | 0.7 
24 | 13  | 0.9 
25 | Null | 0.9 

現在我想拿到第2行通過降低VALUE的順序排序每個號碼。

ID | NUMBER | VALUE 
------------------- 
21 | 12  | 0.8 
20 | 12  | 0.7 
24 | 13  | 0.9 
22 | 13  | 0.8 

我試過至今的代碼看起來是這樣的: (實測值:Grouped LIMIT in PostgreSQL: show the first N rows for each group?

SELECT DISTINCT t_outer.id, t_top.number, t_top.value 
FROM table t_outer 
JOIN LATERAL (
    SELECT * FROM table t_inner 
    WHERE t_inner.number NOTNULL 
    AND t_inner.id = t_outer.id 
    AND t_inner.number = t_outer.number 
    ORDER BY t_inner.value DESC 
    LIMIT 2 
    ) t_top ON TRUE 
order by t_outer.value DESC; 

一切都很好,到目前爲止,它只是好像LIMIT 2不工作。我得到所有NUMBER元素的所有行。

回答

2

。利用窗口分析功能的row_number

Rextester Demo

select "ID", "NUMBER", "VALUE" from 
(select t.* 
,row_number() over (partition by "NUMBER" 
        order by "VALUE" desc 
        ) as rno 
from table1 t 
) t1 
where t1.rno <=2; 

輸出

ID NUMBER VALUE 
21 12  0,8000 
20 12  0,7000 
24 13  0,9000 
22 13  0,8000 
25 NULL 0,9000 

說明:

內部查詢T1,將assing rno秩序desc每個number組。然後在外部查詢中,您可以選擇rno <= 2以獲取您的輸出。

+0

謝謝!這是行得通的。 – BenWhite