2012-03-06 255 views
0

我想選擇FA_Event =「Watch List Qualified」和FA_ID = MAX(FA_ID)的那些符號。 這意味着:符號「A」的該數據庫MAX(FA_ID)= 1,符號「B」的MAX(FA_ID)= 3。我必須檢查是否在這個最大值(1,3)事件=「觀察名單合格」或不。由於在FA_ID = 3中沒有「Watch List Qualified」,所以答案只會是「A」。從數據庫中選擇SQL查詢

FA_ID FA_SYmbol FA_Event    FA_DATE  FA_COmment 
1  A   NULL     NULL   NULL 
1  A   Watch List Qualified 05-Mar-12 NULL 
1  B   NULL     NULL   NULL 
1  B   Watch List Qualified 05-Mar-12 NULL 
2  B   NULL     NULL   NULL 
2  B   e7      NULL   NULL 
2  B   e9      NULL   NULL 
2  B   Watch List Qualified 05-Mar-12 NULL 
3  B   NULL     NULL   NULL 
3  B   e2      NULL   NULL 

回答

1

它看起來這是你在找什麼:

http://sqlfiddle.com/#!3/5ff70/9

select * from 
table1 
    inner join (
     select fa_symbol, max(fa_id) as maxid 
     from table1 
     group by fa_symbol 
    ) maxes on 
    table1.fa_symbol = maxes.fa_symbol AND 
    table1.fa_id = maxes.maxid 
where 
fa_event = 'Watch List Qualified' 
+1

順便說一句 - 我是後面的開發者sqlfiddle.com – 2012-03-06 06:29:42

+0

sqlfiddle是一個了不起的工作! :D – mcha 2012-03-06 09:09:57

+0

**尼斯**網站 - SO的理想補充。 – 2012-03-06 09:22:48

0

假設你的RDBMS支持與MAX功能OVER子句,請嘗試:

select * from 
(select m.*, max(FA_ID) over (partition by FA_SYmbol) max_ID 
from myTable m) sq 
where FA_ID = max_ID and 
     FA_Event = 'Watch List Qualified'