Welcome to Subscribe On Youtube

2701. Consecutive Transactions with Increasing Amounts

Description

Table: Transactions

 +------------------+------+ | Column Name | Type | +------------------+------+ | transaction_id | int | | customer_id | int | | transaction_date | date | | amount | int | +------------------+------+ transaction_id is the primary key 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 an SQL query to find the customers who have made consecutive transactions with increasing amount for at least three consecutive days. Include the customer_id, start date of the consecutive transactions period and the end date of the consecutive transactions period. There can be multiple consecutive transactions by a customer.

Return the result table ordered by customer_id in ascending order.

The query 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    | | 10             | 105         | 2023-05-04       | 300    | | 11             | 105         | 2023-05-12       | 250    | | 12             | 105         | 2023-05-13       | 260    | | 13             | 105         | 2023-05-14       | 270    | +----------------+-------------+------------------+--------+ Output:  +-------------+-------------------+-----------------+ | customer_id | consecutive_start | consecutive_end |  +-------------+-------------------+-----------------+ | 101         |  2023-05-01       | 2023-05-03      |  | 105         |  2023-05-01       | 2023-05-04      | | 105         |  2023-05-12       | 2023-05-14      |  +-------------+-------------------+-----------------+ Explanation:  - customer_id 101 has made consecutive transactions with increasing amounts from May 1st, 2023, to May 3rd, 2023 - customer_id 102 does not have any consecutive transactions for at least 3 days.  - customer_id 105 has two sets of consecutive transactions: from May 1st, 2023, to May 4th, 2023, and from May 12th, 2023, to May 14th, 2023.  customer_id is sorted in ascending order. 

 

Solutions

  • # Write your MySQL query statement below WITH T AS ( SELECT t1.*, SUM( CASE WHEN t2.customer_id IS NULL THEN 1 ELSE 0 END ) OVER (ORDER BY customer_id, transaction_date) AS s FROM Transactions AS t1 LEFT JOIN Transactions AS t2 ON t1.customer_id = t2.customer_id AND t1.amount > t2.amount AND DATEDIFF(t1.transaction_date, t2.transaction_date) = 1 ) SELECT customer_id, MIN(transaction_date) AS consecutive_start, MAX(transaction_date) AS consecutive_end FROM T GROUP BY customer_id, s HAVING COUNT(1) >= 3 ORDER BY customer_id; 

All Problems

All Solutions