Вот код, который я бег анализировать логи сервера на базе MySQL:Объединения и объединения данных на разных таблицах MySQL с одинаковыми столбцами в уникальные строки и запуск запроса к нему
SELECT YEAR(datetime), MONTH(datetime), MIN(DATE(datetime)), MAX(DATE(datetime)), COUNT(DISTINCT (ip)), COUNT(ip), (COUNT(ip)/COUNT(DISTINCT (ip))) AS Ratio
FROM `server_log_1`
WHERE `state` LIKE 'action'
AND `user_id` LIKE '9'
GROUP BY MONTH(datetime)
UNION
SELECT YEAR(datetime), MONTH(datetime), MIN(DATE(datetime)), MAX(DATE(datetime)), COUNT(DISTINCT (ip)), COUNT(ip), (COUNT(ip)/COUNT(DISTINCT (ip))) AS Ratio
FROM `server_log_2`
WHERE `state` LIKE 'action'
AND `user_id` LIKE '9'
GROUP BY MONTH(datetime)
UNION
SELECT YEAR(datetime), MONTH(datetime), MIN(DATE(datetime)), MAX(DATE(datetime)), COUNT(DISTINCT (ip)), COUNT(ip), (COUNT(ip)/COUNT(DISTINCT (ip))) AS Ratio
FROM `server_log_3`
WHERE `state` LIKE 'action'
AND `user_id` LIKE '9'
GROUP BY MONTH(datetime)
Это дает мне результат :
YEAR(datetime) MONTH(datetime) MIN(DATE(datetime)) MAX(DATE(datetime)) COUNT(DISTINCT (ip)) COUNT(ip) Ratio
2015 12 2015-12-14 2015-12-30 16 20 1.2500
2016 1 2016-01-05 2016-01-27 15 20 1.3333
2016 2 2016-02-02 2016-02-29 27 36 1.3333
2016 3 2016-03-04 2016-03-29 24 32 1.3333
2016 4 2016-04-01 2016-04-08 5 8 1.6000
2016 4 2016-04-09 2016-04-29 19 27 1.4211
2016 5 2016-05-02 2016-05-28 21 31 1.4762
2016 6 2016-06-01 2016-06-30 28 34 1.2143
2016 7 2016-07-01 2016-07-20 14 16 1.1429
2016 7 2016-07-21 2016-07-21 1 1 1.0000
Эти точные результаты для каждой базы данных, однако вы видите, когда месяц делится на 2 разных баз данных, (например, 2016-4 и 2016-7), это приводит к 2 различных строк, которые будут созданы в течение этого месяца.
Я хочу, чтобы эти строки были сгенерированы как одна строка, которая имеет сумму значений соответствующего месяца. (только одна строка в месяц)
Также упростите запрос, если это возможно.
И я буду в беде после 2016-12 годов, когда группировка по месяцам объединит данные с 2015-12 и 2016-12 годов. Как я могу избежать этой проблемы?
Не могли бы вы написать правильный оператор SQL, пожалуйста?
просто делят полученный результат. Подробнее .. изображение, если возможно –