2015-09-08 125 views
-1
a = id 
b = date 
c = NewestDate 

對於每一個,我有B C最近(最大)日期爲每個ID

我怎樣才能得到每一組ID的(我的「一」列)的最新日期?他們並不都具有相同的結束日期。所以我確實需要所有人的最大值。

的數據是在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」是把他們所有的最大日期,這是不是我其實想要。

編輯:現在的問題已解決與德米特里波利亞科夫給出的答案(謝謝)。使用:

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

窗口函數是您的朋友。 – lad2025

+0

你是什麼意思?對不起,沒有經歷過這 –

+3

https://msdn.microsoft.com/en-us/library/ms189461.aspx – user996142

回答

2

您可以選擇每個組ID的最大日期

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

編輯:對於問題的第二(編輯)的部分可能的解決方案一個是

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 
+0

這解決了我的問題。奇蹟般有效。謝謝 –

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 

建立一個表來選擇記錄與最新的更新和n將這個新表與您的原始表連接以提取匹配行中的所有字段