与()上的PostgreSQL等效的SQL Server
技术问答
252 人阅读
|
0 人回复
|
2023-09-14
|
我想拥有一个与PostgreSQL等效的Sql Server distinct on ()
9 a: R s) V9 C: o% n$ Ga b2 g1 c( r: J7 E: j4 G7 a
----
: i7 {- p9 Q) {+ s% h3 {7 W1 1) u& F; _2 B3 G2 N' V) U2 U
1 2
- I- H1 w! ]& ^, r2 s+ b2 2
2 E- t2 ^- |3 v$ X3 N* }& K/ J. `/ h2 18 k# n( ?' i$ v& L) @
3 3
& Y7 D$ B! a+ s% Lselect distinct on (a) *
# P4 Q& `. T7 ]1 i4 P- ifrom my_table8 `, d: A( E: U8 ~# p9 v) K
a b
# I- v5 x' L9 {----
0 I0 y& t2 _9 a. g' l1 1) A/ W4 ?) H5 P+ K* l: m
2 2
7 r% k. d1 ~9 B% l8 V0 x) L3 37 X# ~. F% J# L
我可以在SQL Server中执行以下操作:- k" D* |$ Y4 o( ]* Q% G
select a, min(b) -- or max it does not matter* W# ] u+ f9 W# s
from my_table
+ ]3 ]8 B+ M$ u v$ \group by a( W. M! `. B6 c5 N& D3 I7 ^
但是,在有许多列并且查询是临时查询的情况下,这样做非常繁琐。有一个简单的方法吗?
0 m4 Z/ N8 U) \9 U / F4 v+ t B' K. Z
解决方案:
. u* E, F$ a! d) ~/ ~. {/ S
+ z7 {: N: M' l9 }
$ B/ b8 k5 O6 M9 t: Z
! t, A9 {+ O) y+ Y: ~% T 您可以尝试ROW_NUMBER,但它可能会影响您的性能。+ v0 V& v w) O, I5 g0 D7 g
;WITH CTE AS
- i* y' U+ ` z1 o/ N(9 t8 ~* [/ N( Q6 I* h% @
SELECT *, ROW_NUMBER() OVER(PARTITION BY a ORDER BY b) Corr+ A$ {; J$ A. B8 G
FROM my_table
: }' r, w+ h4 N! B)
8 a. } X2 C' q/ f' [/ ]SELECT *
) [ B; e" [" n/ t2 D1 dFROM CTE7 [( t! t7 Y, w9 Q# f8 ]4 `
WHERE Corr = 1 |
|
|
|
|
|