|
(2/20/2025)ChatGPT 聊了几轮给的答案:
WITH CTE AS
------
RawData AS
(SELECT Stu_ID, lesson_ID, start_time, end_time FROM CTE),
OrderedData AS
(SELECT Stu_ID,
lesson_ID,
start_time,
end_time,
LAG(end_time, 1, start_time) OVER(PARTITION BY Stu_ID, lesson_ID ORDER BY start_time) AS prev_end_time
FROM RawData),
OverlappingData AS
(SELECT Stu_ID,
lesson_ID,
CASE
WHEN start_time <= prev_end_time THEN
prev_end_time
ELSE
start_time
END AS effective_start_time,
end_time,
prev_end_time
FROM OrderedData),
MergedData AS
(SELECT Stu_ID, lesson_ID, MIN(effective_start_time) AS start_time, end_time
FROM (SELECT Stu_ID,
lesson_ID,
effective_start_time,
end_time,
SUM(CASE
WHEN effective_start_time = prev_end_time THEN
0
ELSE
1
END) OVER(PARTITION BY Stu_ID, lesson_ID ORDER BY effective_start_time) AS seg_id
FROM OverlappingData)
GROUP BY Stu_ID, lesson_ID, end_time, seg_id)
SELECT Stu_ID, lesson_ID, SUM(end_time - start_time) * 24 * 60 AS duration
FROM MergedData
GROUP BY Stu_ID, lesson_ID
ORDER BY Stu_ID;
|
|