2012-07-27 43 views
-4

我有一臺美國廣播公司篩選表在SQL

Id Date  status 
C01 Jul 3  A 
C02 Jul 5  B 
C03 Jul 9  A 
C02 Jul 9  A 
C05 Jul 3  C 
C02 Jul 3  C 
C03 Jul 12  C 
C05 Jul 13  A 

我想篩選此表 再出把...

Id Date  Status 
C01 Jul 3  A 
C02 Jul 9  A 
C03 Jul 12  C 
C05 Jul 13  A 
+2

**你有什麼想要篩選?**什麼是條件而定?只是給我們輸入和輸出,讓我們** GUESS **你想要什麼不是真正的生產..... – 2012-07-27 16:45:22

+0

過濾狀態A與上次修改日期 – kaira 2012-07-27 16:57:00

+0

如果你想這樣做,爲什麼你的產量有一個「C」狀態 ?請使用正確的信息和過濾條件編輯您的問題 – 2012-07-27 16:58:37

回答

0

如果group by您的ID和狀態,你不會獲得預期的產出。你需要讓你的max date每個ID,並通過Join

Select T1.Id, T1.Date, T2.Status from 
    (select Id, max(Date) as 'Date' 
    from Abc group by Id) T1 
    INNER JOIN Abc T2 on T1.Id = T2.Id and T1.Date = T2.Date order by Id asc 

的獲取狀態,如果有二等於dates一個標識可能會失敗,但如果你正在尋找的Max這should't發生。 (或者我們需要更多的信息來知道,在這個情況下,這樣做)

SE-Data

1

這會做你想要什麼,如果你Date列數據類型,日期,而不是一個字符串。

select * 
from 
    (
    select *, 
     row_number() over(partition by Id order by Date desc) as rn 
    from Abc 
) as T 
where T.rn = 1 

SE-Data

+0

+100,如果我可以 - 你怎麼從那個OP給我們(和你)的小信息中找出那一個...... – 2012-07-27 17:25:53

+1

@marc_s幸運我猜:)用琴絃試了一下首先提供,當然不起作用。考慮做一些高級的字母數字排序,但沒有這樣做,因爲該列的名稱是「日期」,它應**是日期/日期時間。 – 2012-07-27 17:33:15