背景:有客戶購買車險,去另一家公司購買後又回到本公司,求轉到其他公司購買保險前在本公司購買車險的連續年份。
--建立乙個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...