我需要查看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
答案 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