给定递增的ID值和创建的日期,请创建一条SQL语句以查找是否有任何日期与oracle中的ID不一致

时间:2019-05-30 07:27:46

标签: sql oracle

给出如下表格: 创建的是TIMESTAMP(6),ID为NUMBER(20,0)

| ID | CREATED                    | ...
| 1  | 2019-11-01 14:19:28.611000 | ...
| 2  | 2019-11-01 14:19:28.680000 | ...

用递增的ID值确定CREATED日期不一致的所有行。
如果这些值是按ID排序的,则任何CREATED <之前的CREATED值。

我尝试过,发现我的版本可怕地进行了笛卡尔直插,而不返回结果。我确定我在查询中缺少一些效率。

作为输出,我需要不同步的行的ID / CREATED。

2 个答案:

答案 0 :(得分:1)

似乎您需要解析函数lead()才能将下一级行与当前值进行比较,如果该值大于当前行,它将显示在您的输出中

with cte as
(
select id,CREATED,lead(CREATED) over(order by id) as NR
from t
) select id,created from cte where CREATED>NR

答案 1 :(得分:0)

使用ROW_NUMBER()可以通过OKID生成订单号,然后将它们相互匹配:

CREATED

对于select * from (select t.*, row_number() over(order by id) as id_order, row_number() over(order by created, id) as created_order from t) where id_order <> created_order ,我以created_ordercreated进行排序,以防万一id包含重复的值。

此查询将返回所有受影响的行。例如,对于这样的数据:

created

查询将返回第2、3和4行。