SQL練習 求斷點前的連續天數

2021-10-05 04:33:26 字數 2247 閱讀 3379

背景:有客戶購買車險,去另一家公司購買後又回到本公司,求轉到其他公司購買保險前在本公司購買車險的連續年份。

--建立乙個person物件

create

table person(

pname varchar2(10)

, pid number(20)

);--新增資料記錄

insert

into person (pid,pname)

values

(2020

,'a');

insert

into person (pid,pname)

values

(2020

,'a');

insert

into person (pid,pname)

values

(2019

,'a');

insert

into person (pid,pname)

values

(2017

,'a');

insert

into person (pid,pname)

values

(2016

,'a');

insert

into person (pid,pname)

values

(2015

,'a');

insert

into person (pid,pname)

values

(2020

,'n');

insert

into person (pid,pname)

values

(2019

,'n');

commit

;--查詢表中記錄

select

*from person;

pname

pida

2020

a2020

a2019

a2017

a2016

a2015

n2020

n2019

方法一

select pname,

max(rn1)

-min

(case

when pid - rn >

1then rn1

when rn is

null

then rn1

end)as cc

from

(select pname, pid, lead(pid)

over

(partition

by pname order

by pid desc

)as rn, dense_rank(

)over

(partition

by pname order

by pid desc

)as rn1

from person

) dgroup

by pname;

結果

pnamecca

3n0方法二

select pname

,count

(pname)

-sum

(case

when aa - bb = cc then

1else

0end)-

1as num

from

(select pname, pid,

max(pid)

over

(partition

by pname order

by pid desc

)as aa, row_number(

)over

(partition

by pname order

by pid desc

)as bb

, lead(pid)

over

(partition

by pname order

by pid desc

)as cc

from

(select pname, pid

from person

group

by pname, pid

) d) dd

group

by pname

SQL 求使用者最大連續登陸天數

因為用了別人的結果圖,沒有自己一步一步跑結果,有需要的小夥伴,自己對照一下哈 做題思路。1.row number 找到xx按某個順序a的排名。是否連續,一定是按某個順序,找到這個順序並進行排名r。2.找規律。進行排名後因為是順序,a也是這個順序。如果連續的話,a r就是乙個同乙個數字,不連續的話就是...

使用SQL語句得到連續天的資料

使用場景 希望通過sql語句查詢得到有簽到記錄的使用者的連續簽到天數的資訊,這裡的重點是連續的天數。第一步 如果資料庫記錄的是datetime型別,則需要先轉成date型別 如果乙個使用者一天會有多條資料,則也需要按使用者和日期進行去重複,保證乙個使用者一天只有一條資料。select company...

SQL查詢至少連續七天下單的使用者

create table orde id varchar 10 date datetime,orders varchar 10 insert into orde values 1 2019 1 1 10 insert into orde values 1 2019 1 2 109 insert in...