久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

獲取所有連續行的不同值?

Getting all consecutive rows differing by certain value?(獲取所有連續行的不同值?)
本文介紹了獲取所有連續行的不同值?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我正在努力解決這個問題,因為它涉及到連續行的比較.我正在嘗試對相差某個數字的值進行分組.例如,假設我有這張表:

I am trying to get my head around doing this as it involves comparison of consecutive rows. I am trying to group values that differ by a certain number. For instance, let us say I have this table:

CREATE TABLE #TEMP (A int, B int)

-- Sample table
INSERT INTO #TEMP VALUES 
(3,1), 
(3,2), 
(3,3),
(3,4),
(5,1),
(6,1),
(7,2),
(8,3),
(8,4),
(8,5),
(8,6)

SELECT * FROM #TEMP

DROP TABLE #TEMP

假設我必須將所有相差 1 且 A 具有相同值的值進行分組.然后我試圖獲得這樣的輸出:

And let us say I have to group all values that differ by 1 having the same value for A. Then I am trying to get an output like this:

A B GroupNo
3 1 1
3 2 1
3 3 1
3 4 1
5 1 2
6 1 3
7 2 4
8 3 5
8 4 5
8 5 5
8 6 5

(3,1) (3,2) (3,3) (3,4)(8,3) (8,4) (8,5) (8,6) 已被放入同一組,因為它們的值相差 1.我將首先展示我的嘗試:

(3,1) (3,2) (3,3) (3,4) and (8,3) (8,4) (8,5) (8,6) have been put into the same group because they differ by a value 1. I will first show my attempt:

CREATE TABLE #TEMP (A int, B int)

-- Sample table
INSERT INTO #TEMP VALUES 
(3,1), (3,2), (3,3), (3,4), (5,1), (6,1), (7,2),
(8,3), (8,4), (8,5), (8,6)

-- Assign row numbers and perform a left join
-- so that we can compare consecutive rows
SELECT ROW_NUMBER() OVER (ORDER BY A ASC) ID, * 
INTO #TEMP2
FROM #TEMP

;WITH CTE AS
(
    SELECT X.A XA, X.B XB, Y.A YA, Y.B YB
    FROM #TEMP2 X
    LEFT JOIN #TEMP2 Y
    ON X.ID = Y.ID - 1
    WHERE X.A = Y.A AND
    X.B = Y.B - 1
)
SELECT XA, XB
INTO #GROUPS
FROM CTE
UNION 
SELECT YA, YB
FROM CTE
ORDER BY XA ASC 

-- Finally assign group numbers
SELECT X.XA, X.XB, Y.GID
FROM #GROUPS X
INNER JOIN
(SELECT XA, ROW_NUMBER() OVER (ORDER BY XA ASC) GID
    FROM #GROUPS Y
    GROUP BY XA
) Y
ON X.XA = Y.XA

DROP TABLE #TEMP
DROP TABLE #TEMP2
DROP TABLE #GROUPS

我將在一個大表(大約 3000 萬行)上執行此操作,因此我希望有一種更好的方法可以對任意值執行此操作(例如,不僅相差 1,而且可能是 2 或 3稍后我將把它合并到一個程序中).關于我的方法是否沒有錯誤以及是否可以改進的任何建議?

I will be doing this on a large table (about 30 million rows) so I was hoping there is a better way of doing this for arbitrary values (for instance, not just differing by 1, but it could be 2 or 3 which I will incorporate later into a procedure). Any suggestions on whether my approach is bug-free and if it can be improved?

推薦答案

declare @Diff int = 1

;with C as
(
  select A, 
         B,
         row_number() over(partition by A order by B) as rn
  from #TEMP
),
R as
(
  select C.A,
         C.B,
         1 as G,
         C.rn
  from C
  where C.rn = 1
  union all
  select C.A,
         C.B,
         G + case when C.B-R.B <= @Diff 
               then 0
               else 1
             end,
         C.rn
  from C
    inner join R
       on R.rn + 1 = C.rn and
          R.A = C.A       
)
select A,
       B,
       dense_rank() over(order by A, G) as G
from R
order by A, G

這篇關于獲取所有連續行的不同值?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Converting Every Child Tags in to a Single Column with multiple Delimiters -SQL Server (3)(將每個子標記轉換為具有多個分隔符的單列-SQL Server (3))
How can I create a view from more than one table?(如何從多個表創建視圖?)
Create calculated value based on calculated value inside previous row(根據前一行內的計算值創建計算值)
How do I stack the first two columns of a table into a single column, but also pair third column with the first column only?(如何將表格的前兩列堆疊成一列,但也僅將第三列與第一列配對?) - IT屋-程序員軟件開發技
Recursive t-sql query(遞歸 t-sql 查詢)
Convert Month Name to Date / Month Number (Combinations of Questions amp; Answers)(將月份名稱轉換為日期/月份編號(問題和答案的組合))
主站蜘蛛池模板: 成人免费片 | 久久99精品久久久久蜜桃tv | 亚洲高清免费观看 | 视频在线h| 国产乱肥老妇国产一区二 | 成人二区 | 日韩三区| 日韩综合色 | 国产精品久久久久久婷婷天堂 | 波多野结衣一二三区 | 午夜视频免费在线观看 | 韩日在线视频 | 欧美片网站免费 | 久久久久高清 | 午夜伦理影院 | 国产精品久久久久一区二区三区 | 日本二区在线观看 | 91高清视频在线观看 | 日韩 欧美 二区 | 成人精品| 国产精品av久久久久久毛片 | 免费观看黄色片视频 | 毛片久久久 | 国产一区影院 | 欧美日韩久久久久 | 欧美色999 | 91成人在线视频 | 天天操精品视频 | 久久久久精| 色综合九九 | 91精品国产综合久久久久久蜜臀 | 日日做夜夜爽毛片麻豆 | 夜夜草天天草 | 欧美综合一区 | 欧美在线观看黄色 | 看片地址| 国产一级大片 | 色偷偷噜噜噜亚洲男人 | 91精品国产高清久久久久久久久 | 欧美综合在线视频 | 日韩欧美专区 |