Oracle SQL查找列,如果条件满足,则比较日期并在列中插入值
需要有关oracle sql代码的帮助。我希望我的代码能够执行以下操作: 查找事件:TS-0068,然后获取任务编号值“55”,然后查找下一个带有“事件:BC-0050”的“55”,并比较两个日期。如果事件:TS-0068,日期A小于事件:BC-0050,日期B,则在列条件下返回字符串开销,否则为Null或空白即可。我在链接中包含测试数据Oracle SQL查找列,如果条件满足,则比较日期并在列中插入值,sql,oracle,Sql,Oracle,需要有关oracle sql代码的帮助。我希望我的代码能够执行以下操作: 查找事件:TS-0068,然后获取任务编号值“55”,然后查找下一个带有“事件:BC-0050”的“55”,并比较两个日期。如果事件:TS-0068,日期A小于事件:BC-0050,日期B,则在列条件下返回字符串开销,否则为Null或空白即可。我在链接中包含测试数据 通过在第一次查询中使用稠密秩分析函数,在按开始时间排序时,使用text2='EVENT:TS-0068'确定第一条记录 然后,仅获取返回的密集秩值等于1的记
通过在第一次查询中使用稠密秩分析函数,在按开始时间排序时,使用text2='EVENT:TS-0068'确定第一条记录 然后,仅获取返回的密集秩值等于1的记录,以便使用相关子查询创建条件列,以扫描text2='EVENT:BC-0050'是否至少存在一条超过text2='EVENT:TS-0068'的starttime值的记录:
您的条件直接转换为分析函数和案例表达式:
select t.*,
(case when text2 = 'EVENT:TS-0068' and TASK_NUMBER = 55 and
row_number() over (partition by text2, task_number order by starttime) = 1 and
min(case when text2 = 'EVENT:BC-0050' then starttime end) over (order by starttime desc) > starttime
then 'Overhead'
end) as condition
from t
order by starttime;
是一个dbfiddle。请重新表述您的问题,将示例数据包含为文本,而不是图像,并向我们显示输出。很抱歉,我完全不知道如何为此oracle sql编写代码。在这个表中似乎不可能做到这一点,但由于我的表数据源来自sql,所以我想也许我可以先从oracle sql中筛选出来,然后只将其移植到表中。我确实阅读了关于使用滞后/超前函数和prevr/nextr函数的文章和示例,但不确定是否合并并构造code@LeoEY . . . 您的描述与结果不一致,因为它应该设置所有55个事件的开销。你只想要第一个吗?谢谢你的回复。我们一定会试试这个并发布更新
select t.*,
(case when text2 = 'EVENT:TS-0068' and TASK_NUMBER = 55 and
row_number() over (partition by text2, task_number order by starttime) = 1 and
min(case when text2 = 'EVENT:BC-0050' then starttime end) over (order by starttime desc) > starttime
then 'Overhead'
end) as condition
from t
order by starttime;