我有tableA
个日期范围:
tranid item startdate enddate
---------------------------------------
1 A 1/1/2000 2/2/2005
2 A 5/1/2000 2/2/2005
3 B 7/8/2015 9/8/2015
4 C 4/10/2007 7/20/2008
5 C 4/10/2003 7/20/2005
如何编写SQL查询以仅选择最近的事务(从最近的开始日期和结束日期开始)?
例如,对于A,最近的日期范围是5/1/2000到2/2/2005,对于C,最近的日期范围是C 4/10/2007到7/20/2008。
我完全不知道写这个,因为它似乎很容易但不是。
select item, max(enddate), max(startdate)
from tableA
where max(enddate)
group by item, enddate, startdate
SQL Server在类似的东西上返回了与'have'相关的错误 - 聚合问题。
格拉西亚斯:)
答案 0 :(得分:2)
你有一个geom_text
没有意义,你也不需要在你的小组中包含startdate / enddate,只需要项目,所以试试:
annotate
答案 1 :(得分:0)
您需要ROW_NUMBER
窗口功能
:with cte as
(
Select Row_Number() Over(Partition by item order by startdate desc) RN,*
From yourtable
)
Select *
From cte
Where RN = 1
答案 2 :(得分:0)
这是一个经典的arg-max问题:你想要最近开始日期的行。
您需要将问题分为两个步骤:
解决方案:
SELECT b.tranid, b.item, a.maxstartdate, b.enddate
FROM
(SELECT t.item, MAX(t.startdate) maxstartdate
FROM t
GROUP BY t.item) a
JOIN t b
ON a.maxstartdate = b.startdate AND a.item = b.item;
希望这可以帮到你! :)