比较字段以查看从昨天到今天是否有变化

时间:2018-09-28 15:41:07

标签: sql oracle date lag

我需要查看COMP_DATE更改或昨天添加的记录,仅显示更改的记录。我需要看看是否有人更改了值。

我尝试了LAST_VALUE和LAG,但似乎无法正确进行比较。

示例数据:

Date          JOB    COMP_DATE
SYSDATE -1   1       09-01-2017

SYSDATE      1       09-27-2018

SELECT

   JOB, COMP_DATE,

   LAST_VALUE(COMP_DATE) OVER (ORDER BY JOB ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS Last_Value

    FROM  JOB_TABLE

   *** I know this section is not valid ***

    Where LAST_VALUE <> Current COMP_DATE 

3 个答案:

答案 0 :(得分:2)

您可以尝试使用子查询。

select * from (
    SELECT
        JOB, 
        COMP_DATE,
        LAG(COMP_DATE) OVER (ORDER BY JOB) AS Last_Value
    FROM JOB_TABLE
) t1
where  LAST_VALUE <> COMP_DATE 

答案 1 :(得分:1)

第一部分将获得更改的记录,联合之后的部分将获得新记录..假设我正确地解释了您的表结构。尽管您可能必须在“日期”字段名称前加上“。”。

 select * from job_table j1
  join job_table j2 on j2.job_id=j1.job_id and j2.date = j1.date - 1
 where 
 j1.comp_date != j2.comp_date
 and j1.com_date=sysdate;
 union all
 select * from job_table j1 where not exists (select * from job_table j2
    where j1.date != j2.date and j1.job_id=j2.job_id)

答案 2 :(得分:1)

使用闪回查询的结果(请注意,示例中的“截至时间戳”必须为“昨天”,可能无法使用sysdate -1,但是我现在无法使用oracle进行测试。

这将告诉您它在昨天和现在之间已更改,但没有比这更精确的了。

 select j1.comp_date, j2.comp_date, j1.job_id
   from job_table j1
   left outer join job_table j2 
     as of timestamp('2018-09-28 00:00:00','yyyy-mm-dd hh:mi:ss')
     on j1.job_id=j2.job_id
   where j2.comp_date is null or j2.comp_date != j1.comp_date