Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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统计过去7天的记录,按零记录分组_Mysql_Sql_Database - Fatal编程技术网

MySQL统计过去7天的记录,按零记录分组

MySQL统计过去7天的记录,按零记录分组,mysql,sql,database,Mysql,Sql,Database,在过去的两天里,我一直在想办法解决这个问题。这是一件我认为很容易的事情,但我一辈子都无法找出所需的SQL查询。我发现了一些相关的问题/答案,但不完全是我遇到的问题/答案 我正在尝试获取一周中过去7天的记录计数,并按分支位置对其进行分组,如果找不到任何记录,则还包括0。每个人都说的一件事是,我需要生成一个日历/日期帮助表,然后离开并加入它。我已经这样做了,现在我有了一个日历表,日期介于2000-01-01和2040-01-01之间 以下是我的表结构的外观: 记录 |地点|日期|事情| |-----

在过去的两天里,我一直在想办法解决这个问题。这是一件我认为很容易的事情,但我一辈子都无法找出所需的SQL查询。我发现了一些相关的问题/答案,但不完全是我遇到的问题/答案

我正在尝试获取一周中过去7天的记录计数,并按分支位置对其进行分组,如果找不到任何记录,则还包括0。每个人都说的一件事是,我需要生成一个日历/日期帮助表,然后离开并加入它。我已经这样做了,现在我有了一个日历表,日期介于
2000-01-01
2040-01-01
之间

以下是我的表结构的外观:

记录
|地点|日期|事情|
|----------|------------|---------|
|分行1 | 2017-04-01 |事情1|
|分行2 | 2017-04-03 |事情2|
|分行1 | 2017-04-03 |事情3|
|分行1 | 2017-04-01 |事情4|
|分行3 | 2017-04-01 |事情5|
|分行3 | 2017-04-02 |事情6|
|分行1 | 2017-04-02 |事情7|
|分行2 | 2017-04-07 |事情8|

让我们假设它现在是
2017-04-07
。请注意,
2017-04-01
2017-04-07
之间的所有日期都不在记录表中,这就是我需要日历助手表的原因。也就是说,我正在尝试获得以下输出:

输出
|地点|日期|计数(事物)|
|----------|------------|--------------|
|分行1 | 2017-04-01 | 2|
|分行1 | 2017-04-02 | 1|
|分行1 | 2017-04-03 | 1|
|分行1 | 2017-04-04 | 0|
|分行1 | 2017-04-05 | 0|
|分行1 | 2017-04-06 | 0|
|分行1 | 2017-04-07 | 0|
|分行2 | 2017-04-01 | 0|
|分行2 | 2017-04-02 | 0|
|分行2 | 2017-04-03 | 1|
|分行2 | 2017-04-04 | 0|
|分行2 | 2017-04-05 | 0|
|分行2 | 2017-04-06 | 0|
|分行2 | 2017-04-07 | 1|
|分行3 | 2017-04-01 | 1|
|分行3 | 2017-04-02 | 1|
|分行3 | 2017-04-03 | 0|
|分行3 | 2017-04-04 | 0|
|分行3 | 2017-04-05 | 0|
|分行3 | 2017-04-06 | 0|
|分行3 | 2017-04-07 | 0|

因此,即使没有记录,我仍然希望显示一行位置和日期(过去7天)。这甚至可以实现吗

这是我一直在胡闹的问题:

SELECT
    `records`.`location`,
    `calendar`.`date`,
    COUNT(`records`.`thing`) AS `count`
FROM `records`
    RIGHT JOIN `calendar` ON `records`.`date` = `calendar`.`date`
WHERE `calendar`.`date` >= '2017-04-01' AND `calendar`.`date` <= '2017-04-07'
GROUP BY `calendar`.`date`, `records`.`location`
ORDER BY `records`.`location` ASC, `calendar`.`date` ASC
选择
`记录`.`location`,
`日历`.`日期`,
将(`records`.`thing`)计数为`COUNT`
从`记录`
右键加入'records`.'date`='calendar`.'date`上的'calendar'`

其中,`calendar`.`date`>='2017-04-01'和`calendar`.`date`='2017-04-01'和`calendar`.`date`不仅需要完整的日期列表,还需要分支机构。我添加了一个包含所有位置的派生表,并将其交叉连接到以前的结果集。此外,select列表中的location字段和group by子句必须来自此派生表

SELECT
    t.`location`,
    `calendar`.`date`,
    COUNT(`records`.`thing`) AS `count`
FROM `records`
RIGHT JOIN (`calendar` 
JOIN (select distinct location from records) t) ON `records`.`date` = `calendar`.`date` and t.location=records.location
WHERE `calendar`.`date` >= '2017-04-01' AND `calendar`.`date` <= '2017-04-07'
GROUP BY `calendar`.`date`, t.`location`
ORDER BY `records`.`location` ASC, `calendar`.`date` ASC
选择
t、 “地点”,
`日历`.`日期`,
将(`records`.`thing`)计数为`COUNT`
从`记录`
右连接(`calendar`
在'records'、'date'='calendar'.'date'和t.location=records.location上加入(从记录中选择不同的位置)

其中'calendar`.'date`>='2017-04-01'和'calendar`.'date`您有分行/位置表吗?太好了!非常感谢。
SELECT
    t.`location`,
    `calendar`.`date`,
    COUNT(`records`.`thing`) AS `count`
FROM `records`
RIGHT JOIN (`calendar` 
JOIN (select distinct location from records) t) ON `records`.`date` = `calendar`.`date` and t.location=records.location
WHERE `calendar`.`date` >= '2017-04-01' AND `calendar`.`date` <= '2017-04-07'
GROUP BY `calendar`.`date`, t.`location`
ORDER BY `records`.`location` ASC, `calendar`.`date` ASC