簡體   English   中英

SQL 服務器查詢以查找特定列的每個 ID 不包含所有前面的數字的位置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM