每个id的最近(最大)日期

时间:2015-09-08 21:30:26

标签: sql sql-server sql-server-2008 tsql sql-server-2012

a = id  
b = date  
c = NewestDate

对于每一个,我都有b c

如何获取每套ID (MY'a'列)的最新日期?他们并非都有相同的结束日期。所以我确实需要最大值。

数据在myTable中, 到目前为止我试过了:

select * 
into #myTable 
from myTable

select 
t.a
,t.b
,t.c 
,(select max(b) from myTable) as c
from myTable t 
left join #myTable t1
on t.a = t1.a and t.b = t1.b
order by a, b 

上面代码的问题是在'c'中它被放置了所有的最大日期,这不是我真正想要的。

编辑:现在用Dmitry Poliakov给出的答案解决了这个问题(谢谢)。使用:

SELECT a,
    b,
    max(b) OVER (PARTITION BY a) AS c
FROM myTable
ORDER BY a,b

2 个答案:

答案 0 :(得分:2)

您可以选择每组ID的最大日期为

WITH cte AS (
    SELECT a,
        b,
        max(b) OVER (PARTITION BY a) AS c,
        d
    FROM myTable
)
SELECT t1.a,
    t1.b,
    t1.c,
    t1.d,
    t2.d AS e
FROM cte t1
JOIN cte t2 ON t1.a=t2.a AND t1.c=t2.b

编辑:第二个(已编辑)部分问题的可能解决方案之一是

{{1}}

答案 1 :(得分:1)

DECLARE @updates TABLE (a int,b date,c date)
INSERT INTO @updates VALUES 
  (1,GETDATE(),GETDATE()+10), 
  (2,GETDATE()+11,GETDATE()+13),
  (2,GETDATE()+11,GETDATE()+14),
  (3,GETDATE()+11,GETDATE()+13),
  (1,GETDATE()+11,GETDATE()+13);

WITH
  cte AS
  (
    SELECT  a, max(c) latest
    FROM  @updates
    GROUP BY a
  )

SELECT  *  
FROM  cte INNER JOIN @updates as d ON cte.a=d.a AND cte.latest = d.c

构建一个表以选择具有最新更新的记录,然后将此新表与原始表连接以提取匹配行中的所有字段