我有记录集:
lvl | root_id | id
1 | 3000 | 5000
2 | 3000 | 5100
2 | 3000 | 5110
3 | 3000 | 5200
我需要按root_id
组数据进行分组,并为每个id
获得root_id
的值,最大值为lvl
:
root_id | id
3000 | 5200
类似的东西:
SELECT root_id, last_value(id) over (partition by root_id order by last lvl)
FROM t
GROUP BY root_id;
但是我得到了错误:
t.id列必须出现在GROUPO BY子句中或在聚合函数中使用。
我该如何解决?
答案 0 :(得分:2)
您可以使用DISTINCT ON
:
SELECT DISTINCT ON (root_id) root_id, id
FROM t
ORDER BY root_id, lvl DESC, id DESC
答案 1 :(得分:2)
您可以尝试使用ROW_NUMBER
窗口功能。
查询1 :
SELECT root_id , id
FROM (
SELECT *, ROW_NUMBER() OVER(partition by root_id order by lvl desc) rn
FROM t
) t1
WHERE rn = 1
Results :
| root_id | id |
|---------|------|
| 3000 | 5200 |