首页 > 解决方案 > 如果结果子集不包含所需的日期,您如何过滤掉它?

问题描述

我正在从 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 。

标签: mysqlsqlfilterstatisticsstandard-deviation

解决方案


窗口函数是一种方法:

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

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


推荐阅读