首页 > 解决方案 > SQL 分析函数第一个值超过最大值(另一个属性)

问题描述

我有一张桌子month_totals,看起来像:

Name      DateFrom       Total                      
a         2017-01-01     34      
b         2017-01-01     54           
a         2017-02-01     22             
b         2017-02-01     12
a         2017-03-01     34      
b         2017-03-01     54 

如何选择最新Totals的 per Name where DateFrom < '2017-03-01'(可能使用分析函数)

以下语句未按预期工作

 SELECT name,
       First_value(total)
         OVER (
           ORDER BY Max(datefrom) DESC)
FROM   month_totals
WHERE datefrom < '2017-03-01'
GROUP  BY NAME  

期望的结果应该是

Name           Total                               
a              22             
b              12

标签: sqlsql-serversql-server-2012

解决方案


您可以在下面尝试使用最小聚合

 SELECT name,min(total) 
    FROM   month_totals
   GROUP  BY NAME 

或者你可以使用 row_number()

select * from
(
SELECT name,
       row_number() over(partition by name order by total)rn
FROM   month_totals
WHERE datefrom < '2017-03-01'
)A where rn=1

推荐阅读