-- 链接 LINK: https://www.nowcoder.com/practice/348afda488554ceb922efd2f3effc427?tpId=82&rp=1&ru=%2Fexam%2Foj&qru=%2Fexam%2Foj&sourceUrl=%2Fexam%2Foj%3Fdifficulty%3D5%26page%3D1%26pageSize%3D50%26search%3D%26tab%3DSQL%25E7%25AF%2587%26topicId%3D82&difficulty=5&judgeStatus=&tags=&title=&gioEnter=menu
-- 标题 TITLE: SQL275 牛客的课程订单分析(五)
-- 日期 DATE: 2023-02-25

/* 设计思路

**/

-- 题解 SQL
SELECT user_id,
        MIN(first_buy_date) AS first_buy_date,
        MIN(second_buy_date) AS second_buy_date,
        cnt
FROM (
    SELECT user_id,
        date,
        IF(ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY date) = 1, date, NULL) AS first_buy_date,
        IF(ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY date) = 2, date, NULL) AS second_buy_date,
        COUNT(id) OVER(PARTITION BY user_id) AS cnt
    FROM order_info
    WHERE status = 'completed' AND date > '2025-10-15' 
        AND product_name IN ('C++', 'Java', 'Python')
) T
WHERE cnt >= 2
GROUP BY user_id, cnt
ORDER BY user_id

;

-- 数据 DATA ===================================================
drop table if exists order_info;
CREATE TABLE order_info (
id int(4) NOT NULL,
user_id int(11) NOT NULL,
product_name varchar(256) NOT NULL,
status varchar(32) NOT NULL,
client_id int(4) NOT NULL,
date date NOT NULL,
PRIMARY KEY (id));

INSERT INTO order_info VALUES
(1,557336,'C++','no_completed',1,'2025-10-10'),
(2,230173543,'Python','completed',2,'2025-10-12'),
(3,57,'JS','completed',3,'2025-10-23'),
(4,57,'C++','completed',3,'2025-10-23'),
(5,557336,'Java','completed',1,'2025-10-23'),
(6,57,'Java','completed',1,'2025-10-24'),
(7,557336,'C++','completed',1,'2025-10-25'),
(8,557336,'Python','completed',1,'2025-10-26');