SQL查詢至少連續(xù)n天登錄的用戶
更新時(shí)間:2022年01月01日 11:21:08 作者:?LUC?
這篇文章介紹了SQL查詢至少連續(xù)n天登錄用戶的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
以連續(xù)3天為例,使用工具:MySQL。
1.創(chuàng)建SQL表:
create table if not exists 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 into orde values('1' , '2019/1/3',150 );
insert into orde values('1' , '2019/1/4',99);
insert into orde values('1' , '2019/1/5',145);
insert into orde values('1' , '2019/1/6',1455);
insert into orde values('1' , '2019/1/7',199);
insert into orde values('1' , '2019/1/8',188 );
insert into orde values('4' , '2019/1/1',10 );
insert into orde values('2' , '2019/1/2',109 );
insert into orde values('3' , '2019/1/3',150 );
insert into orde values('4' , '2019/1/4',99);
insert into orde values('5' , '2019/1/5',145);
insert into orde values('6' , '2019/1/6',1455);
insert into orde values('7' , '2019/1/7',199);
insert into orde values('8' , '2019/1/8',188 );
insert into orde values('9' , '2019/1/1',10 );
insert into orde values('9' , '2019/1/2',109 );
insert into orde values('9' , '2019/1/3',150 );
insert into orde values('9' , '2019/1/4',99);
insert into orde values('9' , '2019/1/6',145);
insert into orde values('9' , '2019/1/9',1455);
insert into orde values('9' , '2019/1/10',199);
insert into orde values('9' , '2019/1/13',188 );查看數(shù)據(jù)表:

2.使用row_number() over() 排序函數(shù)計(jì)算每個(gè)id的排名,SQL如下:
select *,row_number() over(partition by id order by date ) 'rank' from orde where orders is not NULL;
查看數(shù)據(jù)表:

3.將date日期字段減去rank排名字段,SQL如下:
select *,DATE_SUB(a.date,interval a.rank day) 'date_sub' from( select *,row_number() over(partition by id order by date ) 'rank' from orde where orders is not NULL ) a;
查看數(shù)據(jù):

4.根據(jù)id和date分組并計(jì)算分組后的數(shù)量(count)、計(jì)算最早登錄和最晚登錄的時(shí)間,SQL如下:
select b.id,min(date) 'start_time',max(date) 'end_time',count(*) 'date_count' from( select *,DATE_SUB(a.date,interval a.rank day) 'date_sub' from( select *,row_number() over(partition by id order by date ) 'rank' from orde where orders is not NULL ) a ) b group by b.date_sub,id having count(*) >= 3 ;
查看數(shù)據(jù):

參考資料:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Mysql查詢不需要Group?by的字段方法實(shí)例
在平時(shí)的開發(fā)任務(wù)中我們經(jīng)常會(huì)用到MYSQL的GROUP BY分組,用來獲取數(shù)據(jù)表中以分組字段為依據(jù)的統(tǒng)計(jì)數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Mysql查詢不需要Group?by字段方法的相關(guān)資料,需要的朋友可以參考下2024-04-04
mysql如何查詢某一時(shí)間段內(nèi)沒有賣出的商品
室友拿來一道關(guān)于mysql查詢的問題,利用mysql查詢某一時(shí)間段內(nèi)沒有賣出的商品,需要的朋友可以參考下2014-02-02
sql中select into和insert select的用法小結(jié)
在工作中,我們經(jīng)常需要備份表,本文主要介紹了sql中select into和insert select的用法小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2024-08-08
詳解MySQL數(shù)據(jù)類型DECIMAL(N,M)中N和M分別表示的含義
關(guān)于MySQL數(shù)據(jù)類型decimal中n和m分別表示什么含義?本文就此問題作了簡(jiǎn)單論述,并創(chuàng)建相關(guān)表進(jìn)行驗(yàn)證,需要的朋友可以了解下。2017-10-10

