Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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 LAG函数及时返回错误的计算_Oracle_Oracle Sqldeveloper_Lag_Partition By - Fatal编程技术网

Oracle SQL LAG函数及时返回错误的计算

Oracle SQL LAG函数及时返回错误的计算,oracle,oracle-sqldeveloper,lag,partition-by,Oracle,Oracle Sqldeveloper,Lag,Partition By,我在第一行的计算列不同时间是不正确的数据,第二行是正确的数据,直到第10行再次是不正确的数据,然后下一行使用滞后函数再次返回到正确的计算。如果有人能在这个问题上帮助我,我将不胜感激。谢谢 [![这是数据样本][1][1] 以下是我的问题: select EQP_ID,LOT_ID,ACTIVITY,DATE_TIME TO_CHAR (DATE '1900-01-01' + ABS ( LAG(DATE_TIME,1)OVER(PARTITION BY EQP_ID ORDER BY DATE_

我在第一行的计算列不同时间是不正确的数据,第二行是正确的数据,直到第10行再次是不正确的数据,然后下一行使用滞后函数再次返回到正确的计算。如果有人能在这个问题上帮助我,我将不胜感激。谢谢 [![这是数据样本][1][1]

以下是我的问题:

select EQP_ID,LOT_ID,ACTIVITY,DATE_TIME
TO_CHAR (DATE '1900-01-01' + ABS ( LAG(DATE_TIME,1)OVER(PARTITION BY EQP_ID ORDER BY DATE_TIME) - DATE_TIME), 'HH24:MI:SS')AS Different_Time
from STG_RMSTMP_CJ.ota_activity where EQP_ID = '93K-P007'
这是输出结果: [1] :


你的第一个逻辑很好。你也应该考虑白天的差异。但是,为了给你提供你想要的解决方案,请尝试下面的方法


您的查询很好,但您只需要格式化处理天数、小时数

我也为你做了同样的事情:


请您添加输入数据而不是图像,Lag还有默认值参数,可以在Null的情况下使用。您想在第10行看到什么结果@YongHi ismetguzelgun,第10行中的(不同的时间列)计算不是正确的数据,应该是15:42:44-10:28:18=05:14:26,对吗?谢谢在这种情况下,你的第二行肯定也错了,对吗@YongHi ismetguzelgun,嗯,是的,但是从第三行开始,数据是正确的。Hi ismetguzelgun,它返回我不正确的数据。Hi ismetguzelgun,只有第二行在第3行之后返回正确的值,直到第11行不是正确的值。Hi ismetguzelgun,我已经尝试过这个方法,从第二行时间到第一行时间的平均分块。谢谢你的解决方案。非常感激。你能考虑给予一个赞成票吗?@勇
EQP_ID     LOT_ID      ACTIVITY         DATE_TIME             Different_Time 

93K-P007   GC00495     LOAD_LOT     2020-08-03 16:48:48           NULL
93K-P007   GC00495     LOAD_LOT     2020-08-05 11:51:44         19:02:56
93K-P007   GC00495     LOAD_LOT     2020-08-05 11:57:24         00:05:40
93K-P007   GC00495     LOAD_LOT     2020-08-05 15:14:21         03:16:57
93K-P007   WD72120     LOAD_LOT     2020-08-05 15:17:17         00:02:56
93K-P007   GC00495     LOAD_LOT     2020-08-05 15:28:43         00:11:26
93K-P007   GC00495     LOAD_LOT     2020-08-05 15:30:00         00:01:17
93K-P007   GC00495     LOAD_LOT     2020-08-05 15:42:44         00:12:44
93K-P007   GC00495     LOAD_LOT     2020-08-07 10:28:18         18:45:34
93K-P007   GC00495     LOAD_LOT     2020-08-07 10:33:31         00:05:13
WITH MAIN
     AS (SELECT '93K-P007' AS EQP_ID,
                'GC00495' LOT_ID,
                'LOAD_LOT' ACTIVITY,
                TO_DATE ('2020-08-03 16:48:48', 'YYYY-MM-DD HH24:MI:SS')
                   AS DATE_TIME
           FROM DUAL
         UNION ALL
         SELECT '93K-P007' AS EQP_ID,
                'GC00495' LOT_ID,
                'LOAD_LOT' ACTIVITY,
                TO_DATE ('2020-08-05 11:51:44', 'YYYY-MM-DD HH24:MI:SS')
                   AS DATE_TIME
           FROM DUAL
         UNION ALL
         SELECT '93K-P007' AS EQP_ID,
                'GC00495' LOT_ID,
                'LOAD_LOT' ACTIVITY,
                TO_DATE ('2020-08-05 11:57:24', 'YYYY-MM-DD HH24:MI:SS')
                   AS DATE_TIME
           FROM DUAL
         UNION ALL
         SELECT '93K-P007' AS EQP_ID,
                'GC00495' LOT_ID,
                'LOAD_LOT' ACTIVITY,
                TO_DATE ('2020-08-05 15:14:21', 'YYYY-MM-DD HH24:MI:SS')
                   AS DATE_TIME
           FROM DUAL
         UNION ALL
         SELECT '93K-P007' AS EQP_ID,
                'WD72120' LOT_ID,
                'LOAD_LOT' ACTIVITY,
                TO_DATE ('2020-08-05 15:17:17', 'YYYY-MM-DD HH24:MI:SS')
                   AS DATE_TIME
           FROM DUAL
         UNION ALL
         SELECT '93K-P007' AS EQP_ID,
                'GC00495' LOT_ID,
                'LOAD_LOT' ACTIVITY,
                TO_DATE ('2020-08-05 15:28:43', 'YYYY-MM-DD HH24:MI:SS')
                   AS DATE_TIME
           FROM DUAL
         UNION ALL
         SELECT '93K-P007' AS EQP_ID,
                'GC00495' LOT_ID,
                'LOAD_LOT' ACTIVITY,
                TO_DATE ('2020-08-05 15:30:00', 'YYYY-MM-DD HH24:MI:SS')
                   AS DATE_TIME
           FROM DUAL
         UNION ALL
         SELECT '93K-P007' AS EQP_ID,
                'GC00495' LOT_ID,
                'LOAD_LOT' ACTIVITY,
                TO_DATE ('2020-08-05 15:42:44', 'YYYY-MM-DD HH24:MI:SS')
                   AS DATE_TIME
           FROM DUAL
         UNION ALL
         SELECT '93K-P007' AS EQP_ID,
                'GC00495' LOT_ID,
                'LOAD_LOT' ACTIVITY,
                TO_DATE ('2020-08-07 10:28:18', 'YYYY-MM-DD HH24:MI:SS')
                   AS DATE_TIME
           FROM DUAL
         UNION ALL
         SELECT '93K-P007' AS EQP_ID,
                'GC00495' LOT_ID,
                'LOAD_LOT' ACTIVITY,
                TO_DATE ('2020-08-07 10:33:31', 'YYYY-MM-DD HH24:MI:SS')
                   AS DATE_TIME
           FROM DUAL)
SELECT EQP_ID,
               LOT_ID,
               ACTIVITY,
               DATE_TIME,
               TO_CHAR(
               LPAD(ABS(EXTRACT(HOUR FROM TO_TIMESTAMP(TO_CHAR(LAG (DATE_TIME, 1 ,DATE_TIME)OVER (PARTITION BY EQP_ID ORDER BY DATE_TIME),'yyyy-mm-dd HH24:MI:SS'),'yyyy-mm-dd HH24:MI:SS')) -
               EXTRACT(HOUR FROM TO_TIMESTAMP(TO_CHAR(DATE_TIME,'yyyy-mm-dd HH24:MI:SS'),'yyyy-mm-dd HH24:MI:SS'))) ,2,'0')||':'||
               LPAD(ABS(EXTRACT(MINUTE FROM TO_TIMESTAMP(TO_CHAR(LAG (DATE_TIME, 1 ,DATE_TIME)OVER (PARTITION BY EQP_ID ORDER BY DATE_TIME),'yyyy-mm-dd HH24:MI:SS'),'yyyy-mm-dd HH24:MI:SS')) -
               EXTRACT(MINUTE FROM TO_TIMESTAMP(TO_CHAR(DATE_TIME,'yyyy-mm-dd HH24:MI:SS'),'yyyy-mm-dd HH24:MI:SS'))) ,2,'0')||':'||
               LPAD(ABS(EXTRACT(SECOND FROM TO_TIMESTAMP(TO_CHAR(LAG (DATE_TIME, 1 ,DATE_TIME)OVER (PARTITION BY EQP_ID ORDER BY DATE_TIME),'yyyy-mm-dd HH24:MI:SS'),'yyyy-mm-dd HH24:MI:SS')) -
               EXTRACT(SECOND FROM TO_TIMESTAMP(TO_CHAR(DATE_TIME,'yyyy-mm-dd HH24:MI:SS'),'yyyy-mm-dd HH24:MI:SS'))),2,'0') 
               ) AS DIFF
          FROM MAIN
         WHERE EQP_ID = '93K-P007'
select EQP_ID,LOT_ID,ACTIVITY,DATE_TIME, abs(extract (DAY from Different_Time))||' '||abs(extract (HOUR from Different_Time))||':'||abs(extract (MINUTE from Different_Time))||':'||abs(extract (SECOND from Different_Time)) AS Different_Time from (
select EQP_ID,LOT_ID,ACTIVITY,DATE_TIME,
 LAG(DATE_TIME,1) OVER(PARTITION BY EQP_ID ORDER BY DATE_TIME) - DATE_TIME AS Different_Time
from table1 where EQP_ID = '93K-P007');