Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
组合两个MySQL计数查询_Mysql_Sql - Fatal编程技术网

组合两个MySQL计数查询

组合两个MySQL计数查询,mysql,sql,Mysql,Sql,我有一个包含列的表:NAME、CHANGE\u ID和CHANGE\u DATE,其中每一行构成一个单独的更改,列指示更改的人(NAME)、更改的时间(timestamp)和更改的ID(integer) 我可以通过以下查询检索按更改最多(上个月)的名称排序的名称列表: SELECT NAME AS name, COUNT(DISTINCT CHANGE_ID) AS changes FROM CHANGE_TABLE WHERE DATE(CHANGE_DATE)

我有一个包含列的表:NAME、CHANGE\u ID和CHANGE\u DATE,其中每一行构成一个单独的更改,列指示更改的人(NAME)、更改的时间(timestamp)和更改的ID(integer)

我可以通过以下查询检索按更改最多(上个月)的名称排序的名称列表:

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
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个月内每月所做更改的列表:

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
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的理解还不足以解决这个问题。任何帮助都将不胜感激。

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

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

我加上了
订单日期描述,更改计数描述
,它提供了我所需要的东西。谢谢你的帮助。好吧,我撒谎了。我实际需要它按日期顺序排列,然后我需要按照我上面问题的第一个查询结果中出现的相同顺序排列名称。。。有什么想法吗?