MySQL 查询以获取每个阶段的持续时间

MySQL query to get duration for each stage

我有一个 table 这样的:

listing stage status timeInMillis desc
121 0 0 1653429998443 part-1
121 0 0 1653429998453 part-2
121 0 1 1653429998696 part-1-complete
121 0 1 1653429998753 part-2-complete
121 1 0 1653429998794 ...
121 1 0 1653429998811 ...
121 1 1 1653429999069 ...
121 1 1 1653429999090 ...
164 .. .. .. ...

阶段可以是 01。状态0表示Started1表示完成。对于此查询,desc 并不重要。我需要生成整个 table 的报告并查找每个列表的每个阶段的持续时间。例如,121 和阶段 0 的持续时间是 (1653429998753 - 1653429998443),阶段 1 是 (1653429999090 - 1653429998794)。是否可以仅通过查询或必须使用 procedure/functions 来解决这个问题?很难绕过我的头来得到这个查询。

使用条件聚合:

SELECT listing, stage,
       MAX(CASE WHEN status = 1 THEN timeInMillis END) -
       MIN(CASE WHEN status = 0 THEN timeInMillis END) AS difference
FROM tablename
GROUP BY listing, stage;

参见demo