排序后只获取最后一行

时间:2017-08-11 08:03:50

标签: sql postgresql

我的问题的一个例子
    我有这张桌子

ID | colA | ColB | Result
1  | 10   | 24   | 1       <- There is a newer row with the same colA and colB ( id=4)
2  | 12   | 24   | 0
3  | 95   | 22   | 0       <- There is a newer row with the same colA and colB ( id=6)
4  | 10   | 24   | 1
5  | 10   | 22   | 1
6  | 95   | 22   | 0

我只想获得具有相同colA和colB的更大ID的行。在请求之后我应该得到它。

ID | colA | ColB | Result
2  | 12   | 24   | 0
4  | 10   | 24   | 1
5  | 10   | 22   | 1
6  | 95   | 22   | 0

我想要一个完成这项工作的查询。我正在考虑触发器,但是sql请求应该更好。

1 个答案:

答案 0 :(得分:3)

将CTE与row_number()

一起使用
with CTE as
(
select t1.*, row_number() over(partition by ColA, ColB order by id desc) rn
from MyTable t1
)
select *
from CTE
where rn=1