SQL query for users who have logged in for at least n consecutive days

SQL query for users who have logged in for at least n consecutive days

Take 3 consecutive days as an example, using the tool: MySQL.

1. Create SQL table:

 create table if not exists order(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 );

View the datasheet:

2. Use the row_number() over() sorting function to calculate the ranking of each id. The SQL is as follows:

 select *,row_number() over(partition by id order by date ) 'rank'
from orde
where orders is not NULL;

View datasheet:

3. Subtract the rank field from the date field. The SQL is as follows:

 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;

View the data:

4. Group by id and date and calculate the number of grouped items (count), and calculate the earliest and latest login times. The SQL is as follows:

 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
)
) b
group by b.date_sub,id
having count(*) >= 3
;

View the data:

References:

SQL query for users who have placed orders for at least seven consecutive days

The above is the full content of this article. I hope it will be helpful for everyone’s study. I also hope that everyone will support 123WORDPRESS.COM.

You may also be interested in:
  • How to query the maximum number of consecutive login days between two dates in MySQL
  • MySQL calculates the number of days, months, and years between two dates
  • mysql generates continuous dates and variable assignments
  • How to calculate the number of consecutive login days in MySQL

<<:  Summary of common tool functions necessary for front-end development

>>:  Neon light effects implemented with pure CSS3

Recommend

JS implements random generation of verification code

This article example shares the specific code of ...

Ubuntu16.04 installation mysql5.7.22 graphic tutorial

VMware12.0+Ubuntu16.04+MySQL5.7.22 installation t...

How to use Docker Swarm to build WordPress

cause I once set up WordPress on Vultr, but for w...

An example of vertical centering of sub-elements in div using Flex layout

1. Flex is the abbreviation of Flexible Box, whic...

How to install Docker on Raspberry Pi

Because the Raspberry Pi is based on ARM architec...

How to disable web page styles using Firefox's web developer

Prerequisite: The web developer plugin has been in...

Differences in the hr separator between browsers

When making a web page, you sometimes use a dividi...

Implementation of breakpoint resume in Node.js

Preface Normal business needs: upload pictures, E...

Code for aligning form checkbox and radio text

Alignment issues like type="radio" and t...

win2008 server security settings deployment document (recommended)

I had been working on the project before the New ...

mysql method to view the currently used configuration file my.cnf (recommended)

my.cnf is the configuration file loaded when MySQ...

Explain how to analyze SQL efficiency

The Explain command is the first recommended comm...