我有一个表格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
答案 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'
);