2009-10-22 36 views
1

我有一個由觸發器填充表delivery_history:與最新的時間戳和多個(或全部)列單獨項目返回

id(guid) order_number delivery_number haulier timestamp(getdate()) 

      1    1234    haulier1 2009-10-08 8:34:00 
      2    1235    haulier1 2009-10-09 9:15:00 
      1    1234    haulier2 2009-10-10 9:20:00 

我想返回所有列,但我只是想看看獨特delivery_number與最新的時間戳,所以我希望返回的數據將是:

  1    1234    haulier2 2009-10-10 9:20:00 
      2    1235    haulier1 2009-10-09 9:15:00 

到目前爲止,我已經試過在網站上公佈的響應每一個可能性,並結合他們要麼不給我需要的結果,他們期望我已經明智,並且使用了cremental id而不是我使用的guid(現在有數週的數據來自觸發器,我不想轉儲它),或者他們期望Sql Server 2005或更高版本。

這將SQL Server上提前運行2000

謝謝, 馬克

回答

2

我不喜歡在這裏重複的可能性。具有相同delivery_number的兩行可以具有相同的時間戳。考慮到交付頻率和應用程序的行爲,這可能不太可能,但我不希望依賴這一點來保證正確性。

此版本使用TOP 1,並允許連接斷路器的任意數量:

select * from delivery_history a 
where id = (
    select top 1 id 
    from delivery_history b 
    where a.delivery_number = b.delivery_number 
    order by b.timestamp desc [, tie breaking col1, col2, ... colN] 
) 
1
SELECT order_number, delivery_number, haulier, timestamp 
    FROM delivery_history dh1 
WHERE timestamp = (SELECT max(dh2.timestamp) 
         FROM delivery_history dh2 
        WHERE dh2.delivery_number = dh1.delivery_number) 
相關問題