row_number
窗口函数来完成:select tenant, name, date, months
from (select t.*,
row_number() over (partition by t.tenant, t.name order by t.months desc, t.date desc) as rn
from TableName t) x
where rn = 1
row_number
函数。
查询
;with cte as
(
select rn = row_number() over
(
partition by tenant
order by months desc,[date] desc
),*
from table_name
)
select tenant,name,[date],months from cte
where rn = 1;
tenant/name
(使用partition by
子句),row_number
函数将按顺序对行进行编号,从1,2,3,4,...
开始,始终以1
开始,使用order by
子句来确定顺序。因此,由于order by
子句设置为t.months desc, t.date desc
,对于每个tenant/name
组合,具有最大months
值(如果有多个行具有相同的months
值,则具有最新的date
)的行将具有rn
值为1
。 - sstan