sql - 从同一数据集中选择 2 个日期集?
问题描述
假设我有一个查询选择过去 90 天的所有销售额。我希望能够在案例/时间的基础上隔离某些行,并且无法完全弄清楚如何做到这一点。案例陈述取决于日期,因此:如果日期介于 3/1 和 5/31 之间,那么我想选择任何月底(3/31、4/30、5/31 和今天)的销售额,否则,如果日期不在 3/1 和 5/31 之间,那么我只想选择过去 3 个月末。
到目前为止,我尝试的是在 WHERE 子句中插入一个 Case/When 语句,但这似乎并不合理。还有其他方法可以解决这个问题吗?
作为参考,@monthends 表包含以下单列:
月末
- 2019-03-31
- 2019-02-28
- 2019-01-31
@insideRule 表包含类似的内容:
内幕规则
- 2019-03-31
- 2019-04-22
查询:
SELECT *
FROM mytable
WHERE asofdate IN
CASE WHEN asofdate BETWEEN '3-1-2019' AND '5-31-2019' THEN
(SELECT * FROM @insideRule)
ELSE
(SELECT * FROM @monthends)
END
当我执行上述操作时,出现“IN”周围的语法错误
解决方案
你不想exists
表达case
:
IF EXISTS (SELECT 1 FROM mytable WHERE aasofdate BETWEEN '2019-03-01' AND '2019-05-31')
SELECT *
FROM @insideRule
ELSE
SELECT *
FROM @monthends
推荐阅读
- flutter - 自定义 ClipPath 帮助 Flutter
- python - 为什么我的 Python2 xml 解析器在 Python3 中没有按预期工作?
- kotlin - OpenGL:相机碰撞 - 停止相机的问题
- r - 从 dataframe/tipple 中的列中删除大梯度
- sqlite - 此 NOT EXISTS 语句的动态
- java - 如何使用 InspiroBot.me api?
- python - 在图像中应用智能阈值的方法
- typescript - 您如何抽象出要在多个位置使用的打字稿联合
- spring-boot - 具有子服务状态的自定义健康端点
- python - 缺少 Python36.dll