对不起,我只是没有做横向连接!
我有一张这样的桌子:

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

现在我想按值的降序排列每个数字的前两行。
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;

到目前为止一切都很好,似乎2号限制不起作用。我得到所有数字元素的所有行。

最佳答案

利用windows分析功能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,将对每个rno组的value顺序进行number描述。然后在outer query中,您可以选择rno <= 2来获取输出。

09-08 02:41