[英]SQL Server query to find where all preceding numbers are not included per each ID for a specific column
我很難簡潔地解釋這一點,但基本上我需要查詢表 A 中的每個 ID 號,並在位置列中找到每個特定 ID 缺少序列號的位置。 如果某個 ID 有 position 7,那么該 ID 也應該有 6、5、4、3、2、1 position。 每個 ID 可以有 1-15 個 position 記錄。
有人對 go 的最佳方式有任何建議嗎?
編輯添加:只有一個 ID 列,稱為 GlobalID。 只有一個職位列。 最終結果是,我將使用特定於問題的代碼更新問題列,它將為每個 GlobalID 記錄填充 PositionsIncorrect,其中 Positions 列中的數字序列不正確。
如果你只是想找出差距,你可以在 subuqery 中使用lead()
來獲取相同id
的下一個position
的值,然后在外部查詢中進行比較:
select *
from (
select
id,
position,
lead(position) over(partition by id order by position) lead_position
from tableA
) x
where lead_position is not null and lead_position != position + 1
這將為每個具有相同id
的記錄返回一行,其中下一條記錄不按順序,以及下一條記錄的position
。
像這樣的東西將顯示缺少哪些位置:
DECLARE @t table
(
ID int
, Position int
)
INSERT INTO @t (ID, Position)
VALUES
(1, 4)
, (1, 15)
, (2, 3)
, (2, 10)
;
WITH cte
AS
(
SELECT
ID
, MIN(Position) Position
, MAX(Position) MaxPosition
FROM @t
GROUP BY ID
UNION ALL
SELECT
ID
, Position + 1
, MaxPosition
FROM cte
WHERE Position + 1 <= MaxPosition
)
SELECT
C.ID
, C.Position
, CAST(CASE WHEN T.ID IS NULL THEN 1 ELSE 0 END AS bit) Missing
FROM
cte C
LEFT JOIN @t T ON
C.ID = T.ID
AND C.Position = T.Position
ORDER BY
ID
, Position
OPTION (MAXRECURSION 0)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.