簡體   English   中英

Select 當其他列相同時,一列最小,另一列最大連續數字

[英]Select min of one column and max another column of consecutive numbers when other columns are the same

我需要以下幫助。 讓我用一個例子來解釋,因為我不知道如何用語言來表達。 我有下表:

ID A欄 B欄 是/否
322 0 3
322 3 5
322 5 6 ñ
322 6 8 ñ
322 8 12
566 0 30
566 30 31
566 31 35 ñ

我想得到以下 output:

ID A欄 B欄 是/否
322 0 5
322 5 8 ñ
322 8 12
566 0 31
566 31 35 ñ

有任何想法嗎? 提前致謝!!

這是一個間隙和孤島問題,一種方法使用行數差異法:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY A) rn1,
              ROW_NUMBER() OVER (PARTITION BY ID, YN ORDER BY A) rn2
    FROM yourTable
)

SELECT ID, MIN(A) AS A, MAX(B) AS B, YN
FROM cte
GROUP BY ID, YN, rn1 - rn2
ORDER BY ID, A;

下面演示鏈接的屏幕截圖

演示

如果我們仔細查看上面的GROUP BY子句,我們可以看到我們通過IDYN以及定義為兩個行號序列的差異的偽組進行聚合。 這個rn1 - rn2序列跟蹤一組具有相同IDYN的記錄屬於哪個特定島。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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