2010-02-11 66 views
1

我想寫一個sql語句,它從我的表返回壞行。我有一張桌子和一排排:sql查詢子選擇本身混亂

重要|日期|指標
1 | 10/10/08 | SE
1 | 10/11/09 | CB
1 | 10/12/09 | CE
1 | 10/13/09 | TR
2 | 1/1/09 | SE
3 | 10/10/08 | SE
3 | 10/13/09 | CE
3 | 10/15/09 | SL

所以我想要返回的將是所有的行,其中一個鍵具有CE的指示符,然後我想要的行是完全明確的日期。
EX。我的結果將是:

1 | 10/13/09 | TR
3 | 10/15/09 | SL

我的問題是我無法弄清楚如何使用上面列出的條件自己加入表格。請幫助任何建議。

回答

1

即使一個密鑰出現多次CE,它也會給你所有的行。

select t1.* 
from myTable t1 
inner join 
    (select t2.[key], min(t2.date) minDate 
    from myTable t2 
    inner join ( 
     select CE.[key], CE.date  
     from myTable CE 
     where CE.indicator = 'CE' 
    ) as CEs 
    on CEs.[key] = t2.[key] 
    and CEs.date < t2.date 
    group by t2.[key]) t2s 
on t2s.[key] = t1.[key] 
and t1.date = t2s.minDate 
order by 1, 2 
+0

這隻有在記錄相隔1天時纔有效。 – 2010-02-11 21:20:58

+0

@亞當魯斯你是對的,我改變它 – JBrooks 2010-02-12 02:48:14

+0

這很好地工作 – 2010-02-12 13:44:55

1

大概不是很快,但我的第一個猜測。

select * from table where 'CE' = 
(select top(1) indicator from table 
    t1 where t1.date < table.date and t1.key = table.key order by date desc) 
+0

我認爲這隻返回每個鍵的頂部'CE'行。但至少它給了我一些與 – 2010-02-12 13:33:10

+0

一起工作你嘗試過運行它嗎?它會返回你正在尋找的東西。這比你接受的要快。 – 2010-02-12 23:16:09