SQL Server查找最新的日期范围

时间:2016-09-29 01:00:15

标签: sql sql-server date aggregate

我有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'相关的错误 - 聚合问题。

格拉西亚斯:)

3 个答案:

答案 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问题:你想要最近开始日期的行。

您需要将问题分为两个步骤:

  1. 计算每个项目的最新开始日期。
  2. 将最大结果与原始表连接以获得所需的行。
  3. 解决方案:

    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;
    

    希望这可以帮到你! :)

相关问题