Skip to main content
Back to problems
#1709
Medium Database

Biggest window between visits

Database
69.6% acceptance
Mar 31, 2026
227
17

No description available.

Solution

Pandas
Time O(1)
Space O(1)
LeetCode
solution.pandas
# Table: UserVisits
# 
# +-------------+------+
# | Column Name | Type |
# +-------------+------+
# | user_id     | int  |
# | visit_date  | date |
# +-------------+------+
# This table does not have a primary key, it might contain duplicate rows.
# This table contains logs of the dates that users visited a certain retailer.
# 
#  
# 
# Assume today's date is '2021-1-1'.
# 
# Write a solution 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.
#
# Example 1:
# Input:
# 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 |
# +---------+------------+
# Output:
# +---------+---------------+
# | user_id | biggest_window|
# +---------+---------------+
# | 1       | 39            |
# | 2       | 65            |
# | 3       | 51            |
# +---------+---------------+
# Explanation:
# 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.

import pandas as pd

def biggest_window(user_visits: pd.DataFrame) -> pd.DataFrame:
  user_visits['visit_date'] = pd.to_datetime(user_visits['visit_date'])
  today = pd.to_datetime('2021-1-1')
  user_visits = user_visits.sort_values(['user_id', 'visit_date'])
  user_visits['next_visit'] = user_visits.groupby('user_id')['visit_date'].shift(-1).fillna(today)
  user_visits['window'] = (user_visits['next_visit'] - user_visits['visit_date']).dt.days
  result = user_visits.groupby('user_id')['window'].max().reset_index()
  result.columns = ['user_id', 'biggest_window']
  return result