sql查询子选择自身的混乱

时间:2010-02-11 20:13:42

标签: sql sql-server-2005

我正在尝试编写一个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

我的问题是我无法弄清楚如何使用上面列出的条件将表连接起来。请帮助提出任何建议。

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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