SQL查詢(xún)至少連續(xù)n天登錄的用戶(hù)
更新時(shí)間:2022年01月01日 11:21:08 作者:?LUC?
這篇文章介紹了SQL查詢(xún)至少連續(xù)n天登錄用戶(hù)的方法,文中通過(guò)示例代碼介紹的非常詳細(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模式 Strict Mode知識(shí)點(diǎn)詳解
在本篇文章里小編給各位整理的是一篇關(guān)于MySQL模式 Strict Mode知識(shí)點(diǎn)詳解內(nèi)容,需要的朋友們參考下。2020-03-03查看 MySQL 已經(jīng)運(yùn)行多長(zhǎng)時(shí)間的方法
查看MySQL啟動(dòng)時(shí)間以及運(yùn)行了多長(zhǎng)時(shí)間的方法有利用show與updtime或在linux中直接使用grep mysql 相關(guān)參數(shù)來(lái)查看,下面我們一起來(lái)看看2014-01-01SQL中MIN和MAX及常見(jiàn)函數(shù)教程示例
這篇文章主要為大家介紹了SQL中MIN和MAX及常見(jiàn)函數(shù)教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11MySQL安裝與創(chuàng)建用戶(hù)操作(新手入門(mén)指南)
這篇文章主要為大家介紹了MySQL安裝與創(chuàng)建用戶(hù)的使用講解是非常適合小白新手的入門(mén)學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05