我想要一个与PostgreSQL distinct on ()
a b
----
1 1
1 2
2 2
2 1
3 3
select distinct on (a) *
from my_table
a b
----
1 1
2 2
3 3
我可以在SQL Server中执行:
select a, min(b) -- or max it does not matter
from my_table
group by a
但是在有很多列并且查询是临时查询的情况下,这样做非常繁琐。有没有简单的方法呢?
答案 0 :(得分:12)
您可以尝试ROW_NUMBER
,但这会影响您的表现。
;WITH CTE AS
(
SELECT *, ROW_NUMBER() OVER(PARTITION BY a ORDER BY b) Corr
FROM my_table
)
SELECT *
FROM CTE
WHERE Corr = 1
答案 1 :(得分:8)
除了接受的答案,你可以避免使用两个句子并使用像这样的子选择
SELECT part.*
FROM ( SELECT *, ROW_NUMBER() OVER(PARTITION BY a ORDER BY b) Corr
FROM my_table) part
WHERE part.Corr = 1