mysql - 如果结果子集不包含所需的日期,您如何过滤掉它?
问题描述
我正在从 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
假设最近感兴趣的日期是昨天,您可以使用相关子查询来确保数据可用。
推荐阅读
- ios - 保存 RealmSwift 不支持的属性
- php - AJAX 无法加载状态为 500 的服务器
- haskell - 为里面的辅助函数添加类型签名
- html - 如何将多行文本对齐为表格的列
- python - `(?P
...) ` 和 `\g ` 在 re 模块中
- javascript - JavaScript:使用正则表达式在字符和数字之间添加空格
- android - 如果快速按下按钮,导航到 DialogFragment 会产生 IllegalArgumentException?
- javascript - import vuex store into axios and app.js file
- c# - Summing by multiple columns in a list
- git - GitHub Remote: forbidden fatal: unable to access the requested url returned error: 403