Объедините два MySQL Count Queries - PullRequest
0 голосов
/ 30 марта 2011

У меня есть таблица со столбцами: NAME, CHANGE_ID и CHANGE_DATE, где каждая строка представляет собой одно изменение, в столбцах указано, кто внес изменение (имя), когда оно было сделано (метка времени), и идентификатор для изменения(целое число).

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

SELECT
    NAME AS name,
    COUNT(DISTINCT CHANGE_ID) AS changes
FROM
    CHANGE_TABLE
WHERE
    DATE(CHANGE_DATE) > DATE(now() - INTERVAL 1 MONTH)
GROUP BY
    name
ORDER BY
    changes DESC

И я могу получитьсписок изменений, внесенных за месяц за последние 10 месяцев, с помощью следующего запроса:

SELECT 
    DATE_FORMAT(CHANGE_DATE, '%Y-%m') AS date,
    COUNT(DISTINCT CHANGE_ID) AS change_count
FROM 
    CHANGE_TABLE
WHERE
    CHANGE_DATE > curdate() - INTERVAL 10 MONTH 
GROUP BY
    date

Мне нужен запрос, который будет возвращать объединенную информацию об этих запросах: мне нужны имена верхнего изменения-мейкеры и сколько изменений они вносили каждый месяц за последние 10 месяцев.Меня не особо волнует, как выглядит итоговая таблица, пока есть данные.Я сломал свой мозг, но мое понимание SQL недостаточно велико, чтобы решить проблему.Любая помощь будет оценена.

1 Ответ

1 голос
/ 30 марта 2011

Вы пробовали группировать по дате и имени, что-то вроде:

SELECT 
    DATE_FORMAT(CHANGE_DATE, '%Y-%m') AS date,
    COUNT(DISTINCT CHANGE_ID) AS change_count,
    NAME
FROM 
    CHANGE_TABLE, (SELECT
       NAME AS name,
         COUNT(DISTINCT CHANGE_ID) AS changes
    FROM CHANGE_TABLE
    WHERE DATE(CHANGE_DATE) > DATE(now() - INTERVAL 1 MONTH)
    GROUP BY name
    ORDER BY changes DESC
) subq
WHERE CHANGE_DATE > curdate() - INTERVAL 10 MONTH AND change_table.name = subq.name
GROUP BY date, name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...