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
..
..
..
...
阶段可以是 0
或 1
。状态0
表示Started
,1
表示完成。对于此查询,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。
我有一个 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 | .. | .. | .. | ... |
阶段可以是 0
或 1
。状态0
表示Started
,1
表示完成。对于此查询,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。