MySQL查询结合2选择在一张桌子上

时间:2019-02-22 21:27:21

标签: mysql sql

如何在这样的一张桌子上组合2个选择?

表T1:

id | status | ts
1  | 0      |2019-02-22 00:00:00
2  | 0      |2019-02-22 00:00:00
3  | 0      |2019-02-22 00:00:00
1  | 1      |2019-02-22 01:00:00
3  | 1      |2019-02-22 01:30:00
1  | 0      |2019-02-22 02:00:00
3  | 0      |2019-02-22 03:00:00

我想为每个ID找到status = 0status = 1的最后一个值

1  | 0      |2019-02-22 02:00:00 with 1       | 1      |2019-02-22 01:00:00
2  | 0      |2019-02-22 00:00:00
3  | 0      |2019-02-22 03:00:00 with 3       | 1      |2019-02-22 01:30:00

我尝试过:

SELECT id, status, MAX(ts) 
 from T1 
where status = 1 Union SELECT id, status, MAX(ts) from T1 where status = 0

但不行...:o(

也许可以为每个ID计算两种变化状态之间的时差...

1 个答案:

答案 0 :(得分:1)

有条件的聚合应该达到目的:

SELECT 
    id, 
    MAX(CASE WHEN status = 0 THEN ts END) ts_0, 
    MAX(CASE WHEN status = 1 THEN ts END) ts_1 
FROM T1
GROUP BY id

Demo on DB Fiddle

| id  | ts_0                | ts_1                |
| --- | ------------------- | ------------------- |
| 1   | 2019-02-22 02:00:00 | 2019-02-22 01:00:00 |
| 2   | 2019-02-22 00:00:00 |                     |
| 3   | 2019-02-22 03:00:00 | 2019-02-22 01:30:00 |