Skip to main content
Back to problems
#2228
Medium Database

Users with two purchases within seven days

Database
46.8% acceptance
Mar 31, 2026
68
11

No description available.

Solution

Pandas
Time O(1)
Space O(1)
LeetCode
solution.pandas
# Table: Purchases
# 
# +---------------+------+
# | Column Name   | Type |
# +---------------+------+
# | purchase_id   | int  |
# | user_id       | int  |
# | purchase_date | date |
# +---------------+------+
# purchase_id contains unique values.
# This table contains logs of the dates that users purchased from a certain retailer.
# 
#  
# 
# Write a solution to report the IDs of the users that made any two purchases at most 7 days apart.
# 
# Return the result table ordered by user_id.
# 
# The result format is in the following example.
#
# Example 1:
# Input:
# Purchases table:
# +-------------+---------+---------------+
# | purchase_id | user_id | purchase_date |
# +-------------+---------+---------------+
# | 4           | 2       | 2022-03-13    |
# | 1           | 5       | 2022-02-11    |
# | 3           | 7       | 2022-06-19    |
# | 6           | 2       | 2022-03-20    |
# | 5           | 7       | 2022-06-19    |
# | 2           | 2       | 2022-06-08    |
# +-------------+---------+---------------+
# Output:
# +---------+
# | user_id |
# +---------+
# | 2       |
# | 7       |
# +---------+
# Explanation:
# User 2 had two purchases on 2022-03-13 and 2022-03-20. Since the second purchase is within 7 days of the first purchase, we add their ID.
# User 5 had only 1 purchase.
# User 7 had two purchases on the same day so we add their ID.

import pandas as pd

def find_valid_users(purchases: pd.DataFrame) -> pd.DataFrame:
  purchases['purchase_date'] = pd.to_datetime(purchases['purchase_date'])
  purchases = purchases.sort_values(['user_id', 'purchase_date'])
  purchases['prev_date'] = purchases.groupby('user_id')['purchase_date'].shift(1)
  purchases['diff'] = (purchases['purchase_date'] - purchases['prev_date']).dt.days
  valid = purchases[purchases['diff'] <= 7]['user_id'].drop_duplicates().sort_values()
  return pd.DataFrame({'user_id': valid})