Таблица
+------+-------+------------------+
|CLIENT| VALUE | DATETIME |
+------+-------+------------------+
| A | 1 | 2018-11-10 09:00 |
| B | 1 | 2018-11-10 09:00 |
| C | 1 | 2018-11-10 09:00 |
| D | 2 | 2018-11-10 08:00 |
| E | 2 | 2018-11-10 08:00 |
| F | 3 | 2018-11-10 08:00 |
| A | 1 | 2018-11-10 07:00 |
| B | 2 | 2018-11-10 07:00 |
| C | 2 | 2018-11-10 07:00 |
| D | 3 | 2018-11-10 06:00 |
| E | 1 | 2018-11-10 06:00 |
| F | 2 | 2018-11-10 06:00 |
| A | 1 | 2018-11-08 08:00 |
| B | 2 | 2018-11-08 08:00 |
| C | 2 | 2018-11-08 08:00 |
| D | 1 | 2018-11-08 08:00 |
| E | 1 | 2018-11-08 07:00 |
| F | 2 | 2018-11-08 07:00 |
Я новичок в MySQL, и у меня проблемы с этим запросом.
У меня есть только одна таблица с именем "таблица" с тремя столбцами.
В эту таблицу ежедневно записывается множество данных в разное время из определенного набора клиентов A, B, C, D, E, F
С помощью одного запроса мне нужно создать новую таблицу с одной строкой для каждого клиента и со следующими 4 столбцами:
- первый столбец должен содержать самое новое значение, записанное в таблице для каждого клиента
- второй столбец должен содержать процентное значение времени, равное 1 для каждого клиента в течение последних 24 часов
- третий столбец должен содержать процент времени, в течение которого значение равно 1 для каждого клиента в течение последних 7 дней
- как предыдущий столбец, но в течение последних 30 дней
Надеюсь, кто-нибудь сможет мне помочь.
Что бы я хотел получить:
+------+-------------+-----------+--------------+--------------+
|CLIENT| NEWEST VALUE| LAST 24 H | LAST 7 DAYS | LAST 30 DAYS |
+------+-------------+-----------+--------------+--------------+
| A | 1 | 100% | 100% | ... |
| B | 1 | 50% | 66% | ... |
| C | 1 | 50% | 33% | ... |
| D | 2 | 0% | 33% | ... |
| E | 2 | 50% | 66% | ... |
| F | 3 | 0% | 0% | ... |
Этот фрагмент кода отлично работает для создания столбца «NEWST VALUE»
SELECT
client,
value,
max(datetime)
FROM
table
GROUP BY
client;
и этот столбец "LAST 24 H" создает
SELECT
client,
count(if(value = 1,1, null))/count(value),
FROM
table
WHERE
date(datetime) < CURRENT_DATE() - interval 1 day
GROUP BY
repository_name;
но я не могу собрать весь вывод в одну новую таблицу