-- 链接 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');