oracle 对于表的时间字段,如何确定它是连续的?

tyg4sfes  于 2023-05-16  发布在  Oracle
关注(0)|答案(3)|浏览(309)

使用PLSQL,我有一个包含大量数据的表,其中一个字段是时间,例如,它是连续的

time
2022/1/1
2022/1/2
2022/1/3
2022/1/4
.....
2023/1/1
2023/1/2
2023/1/3
.....

当数据量很大时,如何快速找到例如生成断点的时间数据

2023/2/1
2023/2/4

2023/2/2 2023/2/3这两个数据都是缺失的数据,怎么样才能快速找到它们?
我想到了两个方法。第一个是视觉检查。少量的数据是可以的,但是大量的数据太容易出错。第二个是对时间字段进行处理,截取年和月进行分组,然后检查每个月的数据。天数是否相同

time    count
2022/1   31
2022/2   28
...

但我认为这两种方法都不太好。我不知道是否有更好的方法。如果你能帮助我,我将非常感激

pwuypxnk

pwuypxnk1#

你可以按如下方法来做
1.创建一个存储连续日期的表。
1.左外连接此表的日期列与您正在检查日期的表的日期列。
--未经测试

Create table dt_master as 
SELECT TRUNC (SYSDATE - ROWNUM) chk_dt
  FROM DUAL CONNECT BY ROWNUM < 1000;

SELECT * FROM dt_master dm
LEFT OUTER JOIN CHK_DATE ON dm.chk_dt on chk_date.date_col = dm.chk_dt
WHERE  dm.chk_dt is  NULL;
velaa5lx

velaa5lx2#

也可以使用解析函数LEAD():一个洞是当LEAD(time)<> time + 1时,假设你的时间列是一个没有小时的DATE,如果不是,你可能需要CAST/CONVERT和TRUNC。如果需要[start;结束]的缺失范围。

gmol1639

gmol16393#

使用LAGLEAD

SELECT *
  FROM (SELECT timecol,
               LAG(timecol) OVER (ORDER BY timecol) prev_timecol
          FROM table)
 WHERE timecol > prev_timecol + 1

相关问题