SQL分析函数的第一个值超过max(另一个属性)

时间:2018-12-20 11:48:12

标签: sql sql-server sql-server-2012

我有一个表格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 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

2 个答案:

答案 0 :(得分:2)

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

 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

答案 1 :(得分:0)

尽管您可以使用窗口函数,但我认为相关子查询是一种编写查询的足够简单的方法,并且应该具有良好的性能;

select mt.*
from month_totals mt
where mt.datefrom = (select max(mt2.datefrom)
                     from month_totals mt2
                     where mt2.name = mt.name and mt2.datefrom < '2017-03-01'
                    );