SQL SERVER QUERY选择每个项目的最大值记录

时间:2015-10-07 13:10:30

标签: sql sql-server sql-server-2008 temp-tables

这是样本表

enter image description here

我需要实现的是获取或仅显示月份值最高的租户记录。如果月份相等,我需要根据最新的日期值。以下是所需的输出样本

enter image description here

有了这个,我开始使用这个代码使用max函数并合并了临时表,但无法获得所需的结果。

select tenant, name,  date, month
into #sample
from tenant


select * 
from  #sample  
where months = (select max(months)from #sample)

并输出到这样的东西。我相信,代码在整个列表中获得最大值而不考虑每个租户过滤。

enter image description here

任何帮助将不胜感激:)

2 个答案:

答案 0 :(得分:6)

这可以通过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

答案 1 :(得分:5)

您可以使用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;