sql切分連續數字

2022-09-19 22:30:24 字數 860 閱讀 8378

問題描述

存在乙個表,只有number一列,資料是n行非完全連續的資料,求這n行資料中所有的連續段

示例如:表中共10行資料,分別為數字1,2,3,5,6,7,9,10,11,12。則按照規則求得結果為1-3為一段,5-6為一段,9-12為一段

思路1、按number大小排序,並從小到大標上序號rank_id2、增加差值列(d_value=rand_id-number)3、按d_value分組,求number的最小值、最大值,即得連續段的開始數值、結束數值

sql demo

建表

drop table if exists table_test;

create table table_test (

number int comment '數字'

);

造數

truncate table  table_test;

insert into table_test

values(1),(2),(3),(5),(6),(7),(9),(10),(11),(12);

求值

select

d_value,min(number) as start_num,max(number) as end_num

from

(select

number-row_number() over (order by number) as d_value

,number  

from table_test

) tgroup by d_value;

大Sql的切分執行

以前一直覺得sql應該減少傳遞次數,減少和資料庫的通訊,這樣可以提高效率。但現在發現,凡事都有個度的問題,由於業務需要一次性插入大概4000條資料,如果有併發操作,很容易就造成sql超時錯誤。於是就寫了乙個能夠拆分大sql執行的函式。執行大sql語句,傳入為stringbuilder以提高效率。pu...

sql 180 連續出現的數字

編寫乙個 sql 查詢,查詢所有至少連續出現三次的數字。id num 1 1 2 1 3 1 4 2 5 1 6 2 7 2 例如,給定上面的 logs 表,1 是唯一連續出現至少三次的數字。consecutivenums 1 這道題解法練習一下多表連線的寫法,雖然這種方式效率很低 select d...

連續出現的數字

表 logs 編寫乙個 sql 查詢,查詢所有至少連續出現三次的數字。返回的結果表中的資料可以按任意順序排列。查詢結果格式如下面的例子所示 解法一 使用視窗函式的偏差函式完美實現。可以這樣理解 將num複製兩列num1和num2,然後num1整體向上移動一行,num2整體向上移動兩行,如下 所以只要...