MySQL запрос объединяет 2 выбора на одной таблице - PullRequest
0 голосов
/ 23 февраля 2019

Как мне объединить 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

Я хочу найти последние значения status = 0 и status = 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 (

И, возможно, рассчитать разницу во времени между 2 состояниями изменения для каждого идентификатора...

1 Ответ

0 голосов
/ 23 февраля 2019

Условное агрегирование следует по хитрости:

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

Демонстрация на 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 |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...