查找丢失和乱序的记录

米哈尔·罗莎(Michal Rosa)

模式:

简化-列出ID号,其版本和状态的表格:

CREATE TABLE archive
    ([id] int, [version] int, [status] varchar(1));

INSERT INTO archive
    ([id], [version], [status])
VALUES
    (1, 1, 'A'),
    (1, 2, 'S'),
    (1, 3, 'T'),
    (1, 4, 'A'),
    (2, 2, 'T'),
    (2, 4, 'T'),
    (3, 1, 'A'),
    (3, 3, 'A');

问题:

一些记录缺少其完整的历史记录(版本)。所有ID均应以版本1开头,版本号应连续(与上述架构中的ID 2和3不同)。

所需的输出

所有ID的列表,显示其现有版本以及“跳过”的版本。根据以下示例,输出应如下所示:

id | ver | check
---+-----+------
  1|   1 |   1
  1|   2 |   2
  1|   3 |   3
  1|   4 |   4
  2| NULL|   1
  2|   2 |   2
  2| NULL|   3
  2|   4 |   4
  3|   1 |   1
  3| NULL|   2
  3|   3 |   3

到目前为止,我的努力:

该问题类似于问题,但是没有已解决的固定“ Table2”。每条记录的版本号未知。

到目前为止,我已经提出了以下建议:

SELECT sub.id, sub.ver, sub.seq
FROM (
      SELECT CASE WHEN a.id IS NULL THEN b.id ELSE a.id END as 'id', b.version as 'ver', a.seq as 'seq'
      FROM (select *,
                   row_number() over (partition by id order by version asc) as seq
              from archive) a
      FULL OUTER JOIN archive b ON a.id=b.id AND a.seq=b.version) sub
ORDER BY sub.id, sub.ver, sub.seq

通过以下输出,我几乎可以到达那里:

在此处输入图片说明

任何帮助,将不胜感激。

骄傲的埃德

这可以通过使用 recursive cte.

with cte as (
  select 1 as ctr, id, max(version) version from archive group by id
  union all 
  select ctr + 1, id, version from cte
  where ctr < version
)
select t1.id, t2.version, ctr as [check] from cte t1
left join archive t2 on t2.id = t1.id and t1.ctr = t2.version
order by t1.id, t1.ctr;

参见dbfiddle

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

计算从内容构建到内容构建丢失和获得的记录

来自分类Dev

SQL查找丢失的记录

来自分类Dev

TSQL:查找所需的丢失记录

来自分类Dev

查找日期范围之间的丢失记录

来自分类Dev

通过分组查找丢失的记录

来自分类Dev

GCP Pubsub 中的消息丢失和重复

来自分类Dev

在生态记录中查找和计数音频丢失

来自分类Dev

在另一个表中查找丢失的记录

来自分类Dev

T-SQL确定“乱序”记录

来自分类Dev

SQL Server 2012比较记录并根据动态位置查找丢失的记录

来自分类Dev

SQL为1:many关系的“父”表中的每个记录查找丢失的“子”记录

来自分类Dev

在一个表中查找丢失记录之前或之后的第一条记录

来自分类Dev

Windows窗口的Git GUI丢失和/或不可见

来自分类Dev

您可以有多个丢失和找到的目录吗?

来自分类Dev

RAILS具有多个顺序的活动记录搜索-乱序

来自分类Dev

如何显示丢失的记录

来自分类Dev

记录前缀丢失

来自分类Dev

查找丢失的HTML标签

来自分类Dev

如何查找丢失的行?

来自分类Dev

查找丢失的日子并分组

来自分类Dev

查找丢失的 HTML

来自分类Dev

Shell脚本以检查AIX上的ping数据包丢失和平均延迟

来自分类Dev

模拟R中数据丢失和错误的x百分比

来自分类Dev

asp.net 团队项目显示程序集引用丢失和其他错误

来自分类Dev

C#在焦点丢失和将TextBox的值返还到TextBox触发触发焦点丢失后,在背景上运行Ping

来自分类Dev

NS记录丢失,但没有A记录

来自分类常见问题

如何顺序更新丢失的记录

来自分类Dev

flink:丢失记录了吗?

来自分类Dev

分区后“丢失”记录的30%