2752. Customers with Maximum Number of Transactions on Consecutive Days π
Description
Table: Transactions
+------------------+------+ | Column Name | Type | +------------------+------+ | transaction_id | int | | customer_id | int | | transaction_date | date | | amount | int | +------------------+------+ transaction_id is the column with unique values of this table. Each row contains information about transactions that includes unique (customer_id, transaction_date) along with the corresponding customer_id and amount.
Write a solution to find all customer_id who made the maximum number of transactions on consecutive days.
Return all customer_id with the maximum number of consecutive transactions. Order the result table by customer_id in ascending order.
The result format is in the following example.
Example 1:
Input: Transactions table: +----------------+-------------+------------------+--------+ | transaction_id | customer_id | transaction_date | amount | +----------------+-------------+------------------+--------+ | 1 | 101 | 2023-05-01 | 100 | | 2 | 101 | 2023-05-02 | 150 | | 3 | 101 | 2023-05-03 | 200 | | 4 | 102 | 2023-05-01 | 50 | | 5 | 102 | 2023-05-03 | 100 | | 6 | 102 | 2023-05-04 | 200 | | 7 | 105 | 2023-05-01 | 100 | | 8 | 105 | 2023-05-02 | 150 | | 9 | 105 | 2023-05-03 | 200 | +----------------+-------------+------------------+--------+ Output: +-------------+ | customer_id | +-------------+ | 101 | | 105 | +-------------+ Explanation: - customer_id 101 has a total of 3 transactions, and all of them are consecutive. - customer_id 102 has a total of 3 transactions, but only 2 of them are consecutive. - customer_id 105 has a total of 3 transactions, and all of them are consecutive. In total, the highest number of consecutive transactions is 3, achieved by customer_id 101 and 105. The customer_id are sorted in ascending order.
Solutions
Solution 1
Thinking
For each customer find the longest run of consecutive transaction days, then keep those who attain the global maximum. Scanning sorted dates per customer works; subtracting the row number from the date collapses a run into one key.
Number rows per customer by date, subtract that index from the date to tag the run, group by customer and tag, and keep customers whose count equals the global maximum.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | |