2012-03-06 125 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'