我正在尝试编写一个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
我的问题是我无法弄清楚如何使用上面列出的条件将表连接起来。请帮助提出任何建议。
答案 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