2013-07-20 91 views
3

我有一個表,看起來像下面子查詢/加入同一個表

tbl_veh

VIN   Record DateChange 
11223344  123A 6/24/2012 
11223344  121G 7/20/2013 
11223344  2D54 2/24/2013 
55445588  44D4 2/27/2012 
55445588  855D 3/15/2013 

所以我想選擇VIN和記錄,但只在最近的日期。我會怎麼做?

所以,我還是會回到

11223344 and 121G 
55445588 and 855D   
+0

你只需要最近的2條記錄? –

+0

沒有全部記錄。我擁有的表格有數百條記錄,這只是一個示例。 –

+0

「但只限於最近的日期」 - 您如何決定最近的日期? '11223344和121G'和'55445588和855D'有**不同**日期。 –

回答

5

試試這個:

WITH [ranked] AS (
    SELECT VIN, Record, RANK() OVER(PARTITION BY VIN ORDER BY DateChange DESC, newid()) [rank] 
    FROM tbl_veh) 

SELECT VIN, Record 
FROM [ranked] 
WHERE [rank] = 1; 

或 「不太複雜」 版本(不使用CTE):

SELECT VIN, Record 
FROM (
    SELECT VIN, Record, RANK() OVER(PARTITION BY VIN ORDER BY DateChange DESC, newid()) [rank] 
    FROM tbl_veh) as [ranked] 
WHERE [rank] = 1; 
+0

這是複雜的,我不明白它,但它的工作原理。謝謝 –

+0

沒有。我添加了一個不太複雜的版本:) –

1

試試這個?這隻適用於每個vim有一個Datechange。如果你有多個,你需要做變更

Select tbl_veh.vin, tbl_veh.record 
From tbl_veh 
Inner join (select vin, max(Datechange) 
      from tbl_veh 
      group by vin 
      ) last 
    On last.vin = tbl_veh.vin 
+0

我想要這個工作,但它不喜歡的語法 –