给出如下表格: 创建的是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。
答案 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()
可以通过OK
和ID
生成订单号,然后将它们相互匹配:
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_order
和created
进行排序,以防万一id
包含重复的值。
此查询将返回所有受影响的行。例如,对于这样的数据:
created
查询将返回第2、3和4行。