在 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 功能非常宝贵。它们非常值得您花时间进行试验。