我有下表抽象了一些场景及其步骤,按 START_DATE“desc”排序。
SCENARIO_KEY |
STEP_KEY |
START_DATE |
END_DATE |
PREVIOUS_SCENARIO_KEY |
PREVIOUS_STEP_KEY |
128 |
44 |
20xx04x4 |
0 |
120 |
44 |
120 |
44 |
20xx03x3 |
20xx04x4 |
120 |
38 |
120 |
38 |
20xx11x0 |
20xx03x3 |
121 |
38 |
121 |
38 |
20xx07x2 |
20xx11x0 |
120 |
44 |
120 |
44 |
20xx07x1 |
20xx07x2 |
120 |
38 |
我需要在最后一次更改为值 44 (step_key = 44) 的步骤后获取第一个 scene_key (或另一个标识符)。
因此,此查询的结果应该是上次更改的某个标识符 - 上次更改后的第一行的 START_DATE,值为 44 (20xx03x3) 或上次更改后的 SCENARIO_KEY (120)。
简而言之,我需要能够识别最后更改为“44”步骤键的行。
是否有任何分析函数(或其他查询)可以实现此目的?你能给建议吗?
嗯。 。 。您可以使用以下命令获取最后一个非 44 日期之后最早的 44 日期:
select min(start_date)
from t
where t.start_date > (select max(t2.start_date)
from t t2
where t2.step_key <> 44
);
我想这就是你所要求的。
您也可以使用窗口函数。假设最近的行是“44”:
select t.*
from (select t.*,
row_number() over (order by start_date) as seqnum,
row_number() over (partition by step_key order by start_date) as seqnum_sk
from t
) t
where step_key = 44 and seqnum = seqnum_sk
order by start_date
fetch first 1 row only;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)