mysql - 如果结果子集不包含所需日期,如何过滤掉它?

标签 mysql sql filter statistics standard-deviation

我正在从 MySQL 服务器提取数据并进行分析,以捕获与滚动平均值相差两个标准差的客户量。但是,我不关心对在感兴趣的日期没有任何顾客量的商店进行此分析。在本例中为最大日期。

是否可以过滤掉 SQL 中在所需日期没有任何交易量的 StoreId?

我有一个如下所示的查询:

SELECT CAST(DATE AS DATE), StoreId, COUNT(CustomerId) AS Customer_Volume
FROM CustomerTable
WHERE 1=1
      AND DATE >= DATEADD(DAY, -5, GETDATE())
GROUP BY StoreId, CAST(DATE AS DATE)
ORDER BY 2,1

数据如下:

Date       | StoreId | Customer_Volume
---------------------------------
2020-01-18 |     7   |    10
2020-01-19 |     7   |     8
2020-01-20 |     7   |     8
2020-01-21 |     7   |    12
2020-01-18 |    11   |     4
2020-01-19 |    11   |     2

所以我想知道在此示例中是否可以过滤掉 StoreId = 11。

最佳答案

窗口函数是一种方法:

SELECT CAST(DATE AS DATE), StoreId, COUNT(CustomerId) AS Customer_Volume
FROM CustomerTable
WHERE DATE >= DATEADD(DAY, -5, GETDATE()) AND
      EXISTS (SELECT 1
              FROM CustomerTable ct
              WHERE ct2.StoreId = ct.StoreId AND
                    ct2.Date = CURDATE() - INTERVAL 1 DAY
             )
GROUP BY StoreId, CAST(DATE AS DATE)
ORDER BY 2,1

假设最近感兴趣的日期是昨天,您可以使用相关子查询来确保数据可用。

关于mysql - 如果结果子集不包含所需日期,如何过滤掉它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59865707/

相关文章:

Node.js 中的 MySQL 回滚

json - JQ 选择存在内键的对象

c - 如何在消息到达时过滤/发送消息

mysql - 通过读取2个表中的多个字段来更新一个字段

PHP 比较变量每次都返回 false

mysql - 需要一个 sql 查询来查找 'customer info' 表中所有带空格的 3 部分名称

mysql - MYSQL中如何对列进行排序

mysql - 获取mysql中某个值出现的百分比

php - SQL 查询计算重复出现条目的天数

java - 使用 MappedSuperClass 对相关表进行 Hibernate 过滤器