mysql - 如何在 SQL 查询中同时使用 BETWEEN 和 OR 运算符
问题描述
我在使用 sql 查询来过滤日期范围之间的数据以及几个条件时遇到问题。这是我的查询,它正在返回数据,但BETWEEN
日期范围未按预期工作。
select CAL_DT as CALDATE,
sum (ORDER_PALL) as PALL,
sum (ORDER_QTY) as UNI
from [ORDER]
where CAL_DT BETWEEN '2021-08-07' and '2021-08-16' or
TYPE IN ('MANUAL','SYSTEM') OR
GMM IN ('123','345')
group by CAL_DT order by CAL_DT ASC
输出:
CALDATE PALL UNI
2021-08-04 200 50
2021-08-05 600 30
2021-08-06 300 20
2021-08-07 0 10
2021-08-08 700 90
2021-08-09 300 20
2021-08-10 700 10
预期输出:
CALDATE PALL UNI
2021-08-07 0 10
2021-08-08 700 90
2021-08-09 300 20
2021-08-10 700 10
我的条件TYPE
,GMM
有时可能为空。这就是为什么我想使用OR
.
解决方案
听起来您可能想将您的条款中的标准放在一起:WHERE
SELECT CAL_DT AS CALDATE,
SUM(ORDER_PALL) AS PALL,
SUM(ORDER_QTY) AS UNI
FROM [ORDER]
WHERE CAL_DT BETWEEN '20210807' AND '20210816' AND
TYPE IN ('MANUAL', 'SYSTEM')
GROUP BY CAL_DT
ORDER BY CAL_DT;
注意:由于您似乎使用的是 SQL Server,而不是 MySQL,因此您应该使用明确的日期文字。所以使用'20210807'
而不是'2021-08-07'
.
推荐阅读
- android - Android - 当应用程序关闭时,Volley 请求会抛出 ECONNREFUSED
- android - RxJava debounce 运算符仅显示 Android 上的最后一次发射
- c - fgets() 自行初始化变量
- c - 服务器/客户端 TCP 套接字终端窗口
- json - 尝试在断开的端口上发布消息
- java - 更改 gridview 适配器类中所有复选框的可见性
- sql-server - 创建存储过程以聚合行
- wordpress - 我想在 woocommerce 中为产品添加原产国
- javascript - 从0循环到一个数字并循环遍历数组中的所有数字(javascript)
- javascript - 可折叠查看更多和更少查看按钮