Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL查找列,如果条件满足,则比较日期并在列中插入值_Sql_Oracle - Fatal编程技术网

Oracle SQL查找列,如果条件满足,则比较日期并在列中插入值

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的记

需要有关oracle sql代码的帮助。我希望我的代码能够执行以下操作: 查找事件:TS-0068,然后获取任务编号值“55”,然后查找下一个带有“事件:BC-0050”的“55”,并比较两个日期。如果事件:TS-0068,日期A小于事件:BC-0050,日期B,则在列条件下返回字符串开销,否则为Null或空白即可。我在链接中包含测试数据


通过在第一次查询中使用稠密秩分析函数,在按开始时间排序时,使用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;