Biggest Window Between Visits Problem


Description

LeetCode Problem 1709.

Table: UserVisits

1
2
3
4
5
6
7
8
+-------------+------+
| Column Name | Type |
+-------------+------+
| user_id     | int  |
| visit_date  | date |
+-------------+------+
This table does not have a primary key.
This table contains logs of the dates that users vistied a certain retailer.

Assume today’s date is ‘2021-1-1’.

Write an SQL query that will, for each user_id, find out the largest window of days between each visit and the one right after it (or today if you are considering the last visit).

Return the result table ordered by user_id.

The query result format is in the following example:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
UserVisits table:
+---------+------------+
| user_id | visit_date |
+---------+------------+
| 1       | 2020-11-28 |
| 1       | 2020-10-20 |
| 1       | 2020-12-3  |
| 2       | 2020-10-5  |
| 2       | 2020-12-9  |
| 3       | 2020-11-11 |
+---------+------------+
Result table:
+---------+---------------+
| user_id | biggest_window|
+---------+---------------+
| 1       | 39            |
| 2       | 65            |
| 3       | 51            |
+---------+---------------+
For the first user, the windows in question are between dates:
    - 2020-10-20 and 2020-11-28 with a total of 39 days. 
    - 2020-11-28 and 2020-12-3 with a total of 5 days. 
    - 2020-12-3 and 2021-1-1 with a total of 29 days.
Making the biggest window the one with 39 days.
For the second user, the windows in question are between dates:
    - 2020-10-5 and 2020-12-9 with a total of 65 days.
    - 2020-12-9 and 2021-1-1 with a total of 23 days.
Making the biggest window the one with 65 days.
For the third user, the only window in question is between dates 2020-11-11 and 2021-1-1 with a total of 51 days.


MySQL Solution

1
2
3
4
5
6
7
8
9
select user_id, max(diff) as biggest_window
from
(
    select user_id, 
       datediff(coalesce(lead(visit_date) over (partition by user_id order by visit_date), '2021-01-01'), visit_date) as diff
    from userVisits
) t
group by user_id
order by user_id




Related Posts

Biggest Window Between Visits Problem

LeetCode 1709. Write an SQL query that will, for each...

Number Of Calls Between Two Persons Problem

LeetCode 1699. Write an SQL query to report the number...

Daily Leads And Partners Problem

LeetCode 1693. Write an SQL query that will, for each...

Product's Worth Over Invoices Problem

LeetCode 1677. Write an SQL query that will, for all...

Fix Names In A Table Problem

LeetCode 1667. Write an SQL query to fix the names...

Invalid Tweets Problem

LeetCode 1683. Write an SQL query to find the IDs...