Clo*_*eto 22 sql sql-server sql-server-2008
我想有一个与PostgreSQL等效的Sql Server 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
Run Code Online (Sandbox Code Playgroud)
我可以在SQL Server中做:
select a, min(b) -- or max it does not matter
from my_table
group by a
Run Code Online (Sandbox Code Playgroud)
但是在有很多列并且查询是临时查询的情况下,这样做非常繁琐.有一个简单的方法吗?
Lam*_*mak 14
你可以尝试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
Run Code Online (Sandbox Code Playgroud)
小智 12
除了接受的答案,您可以避免使用两个句子并使用这样的子选择
SELECT part.*
FROM ( SELECT *, ROW_NUMBER() OVER(PARTITION BY a ORDER BY b) Corr
FROM my_table) part
WHERE part.Corr = 1
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7984 次 |
最近记录: |