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