在 SQL 中标记组中值最低的记录
Mark the record with the lowest value in a group in SQL
我有一个 table 如下所示:
ID
ID2
Name
111
223
ABC
111
225
ABC
111
227
ABC
113
234
DEF
113
242
DEF
113
248
DEF
113
259
DEF
113
288
DEF
我想要实现的是在每个 ID1 组中标记 ID2 table 中具有最低值的记录,并执行 select 语句,例如:
ID1
ID2
Name
R
111
223
ABC
Y
111
225
ABC
111
227
ABC
113
234
DEF
Y
113
242
DEF
113
248
DEF
113
259
DEF
113
288
DEF
116
350
GHI
Y
116
356
GHI
如何在 SELECT 语句中实现此目的?
window 函数应该可以解决问题。如果您想查看领带,请使用 dense_rank()
。
Select *
,R = case when row_number() over (partition by ID1,Name order by ID2) = 1
then 'Y'
else ''
end
From YourTable
我应该补充... window 功能非常宝贵。它们非常值得您花时间进行试验。
我有一个 table 如下所示:
ID | ID2 | Name |
---|---|---|
111 | 223 | ABC |
111 | 225 | ABC |
111 | 227 | ABC |
113 | 234 | DEF |
113 | 242 | DEF |
113 | 248 | DEF |
113 | 259 | DEF |
113 | 288 | DEF |
我想要实现的是在每个 ID1 组中标记 ID2 table 中具有最低值的记录,并执行 select 语句,例如:
ID1 | ID2 | Name | R |
---|---|---|---|
111 | 223 | ABC | Y |
111 | 225 | ABC | |
111 | 227 | ABC | |
113 | 234 | DEF | Y |
113 | 242 | DEF | |
113 | 248 | DEF | |
113 | 259 | DEF | |
113 | 288 | DEF | |
116 | 350 | GHI | Y |
116 | 356 | GHI |
如何在 SELECT 语句中实现此目的?
window 函数应该可以解决问题。如果您想查看领带,请使用 dense_rank()
。
Select *
,R = case when row_number() over (partition by ID1,Name order by ID2) = 1
then 'Y'
else ''
end
From YourTable
我应该补充... window 功能非常宝贵。它们非常值得您花时间进行试验。