MYSQL сгруппировать по часам с количеством столбцов - PullRequest
0 голосов
/ 30 октября 2018

Я создаю информационную панель для моей службы поддержки и пытаюсь создать график регистрации и разрешенных инцидентов, но не могу понять, какой запрос даст мне результаты, которые мне нужны за один шаг (в конечном итоге будет выполнен php)

Данные, от которых я хочу получить свои результаты:
Logdatex - метка времени Unix, когда тикет был зарегистрирован
Resolve_datex - метка времени Unix, когда тикет был зарегистрирован

Мои данные выглядят так (Небольшая выборка, так как я работаю с более чем 200 записями в день):

|| *logdatex* || *resolve_datex* ||
|| 1463734913 ||    1531738806   ||
|| 1476695541 ||    1532698820   ||
|| 1528727293 ||    1528729503   ||
|| 1501488766 ||    1529314520   ||
|| 1528730682 ||    1528730809   ||
|| 1507122741 ||    1531739076   ||
|| 1528725481 ||    1528793556   ||
|| 1507300496 ||    1529063535   ||
|| 1511867374 ||    1529314392   ||
|| 1528724000 ||    1528810247   ||

Добрый вывод, который я ищу:

+------+--------+----------+
| Hour | Logged | Resolved |
+------+--------+----------+
|  8   |   19   |   0      |
|  9   |   25   |   15     |
|  10  |   23   |   21     |
|  11  |   20   |   29     |
|  12  |   18   |   33     |
+------+--------+----------+

Я могу довольно легко получить информацию, используя 2 запроса, но хочу использовать только один. 2 запроса, которые я могу использовать для получения данных:
1.

SELECT HOUR (from_unixtime(logdatex)), COUNT(HOUR (from_unixtime(logdatex)))
FROM mytable
WHERE from_unixtime(logdatex) > NOW() - INTERVAL 11 HOUR
GROUP BY HOUR (from_unixtime(logdatex))

2

SELECT HOUR (from_unixtime(resolve_datex)), COUNT(HOUR (from_unixtime(resolve_datex)))
FROM mytable
WHERE from_unixtime(resolve_datex) > NOW() - INTERVAL 11 HOUR
GROUP BY HOUR (from_unixtime(resolve_datex))

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Итак ... после долгих осмотров и ругательств на моем ПК я обнаружил, что с помощью MYSQL 4.0.16 это невозможно, поскольку он не поддерживает вложенные операторы select. Вы можете получить большую часть пути, используя операторы case, но не можете сгруппировать столбцы часа вместе. Похоже, я собираюсь узнать больше PHP, чтобы получить результаты от 2 запросов и отображать в одной таблице.

0 голосов
/ 31 октября 2018

Попробуйте запрос ниже. Надеюсь, это поможет вам.

                            SELECT FIELD, SUM(cnt)
                            FROM (
                              SELECT HOUR (FROM_UNIXTIME(logdatex)) AS FIELD, COUNT(HOUR (FROM_UNIXTIME(logdatex))) AS cnt
                              FROM mytable
                              GROUP BY HOUR (FROM_UNIXTIME(logdatex))
                              UNION ALL
                              SELECT HOUR (FROM_UNIXTIME(resolve_datex)) AS FIELD, COUNT(HOUR (FROM_UNIXTIME(resolve_datex))) AS cnt
                              FROM mytable
                              GROUP BY HOUR (FROM_UNIXTIME(resolve_datex))
                            ) AS combined_table
                            GROUP BY FIELD
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...