有没有一种方法可以从第一行中选择符合条件的特定行?
示例:
Date Val or Val
1-1-2018 2 s
1-2-2018 3 q
1-3-2018 4 l
1-4-2018 -2 a
1-5-2018 -4 a
1-6-2018 -6 c
我只需要选择第一个否定词
value: 2 3 4 -2
或直到第一个 a :s q l a
注意。我尽可能不使用子查询。如果可能的话
答案 0 :(得分:3)
您几乎需要一个子查询。
我倾向于这样做:
select t.*
from t
where t.date <= (select min(t2.date)
from t t2
where t2.val1 < 0 or t2.val3 = 'a'
);
您还可以使用窗口功能:
select t.*
from (select t.*,
min(case when val1 < 0 or val2 = 'a' then date end) over (order by date) as cutoff_date
from t
) t
where date <= cutoff_date;
我应该小心。在Oracle 12C中,您可以在没有子查询的情况下执行此操作:
select t.*
from t
order by coalesce(sum(case when val1 < 0 or val2 = 'a' then 1 else 0 end) over (order by date rows between unbounded preceding and 1 preceding), 0)
fetch first 1 row only with ties;
但是这种方法有点深刻。