结合两个MySQL Count Queries

时间:2011-03-30 17:32:38

标签: mysql sql

我有一个包含列的表:NAME,CHANGE_ID和CHANGE_DATE,其中每行构成一次更改,列表示进行更改(名称)的人员,更改时间(时间戳)以及更改的ID (整数)。

我可以使用以下查询检索按进化最多的名称排序的名单列表(上个月):

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 个答案:

答案 0 :(得分:1)

您是否尝试过分组日期和名称,例如:

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