#mysql #sql #jpa #mssql-jdbc
Вопрос:
У меня возникли проблемы с 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
.
Комментарии:
1. Зачем нужен тег для драйвера JDBC SQL Server, если вы используете MySQL? Вы подаете в суд на Microsoft SQL Server или MySQL?
Ответ №1:
Это звучит так, как будто, возможно, вы этого хотели, и вместе взятые критерии в вашем 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'
.
Комментарии:
1. На самом деле у меня есть несколько условий, таких как
TYPE
в предложении where. Например:GMM IN ('123','456')
. Эти значения могут несколько раз быть пустыми. Вот почему я использовалOR
оператора. В этом случае запрос возвращает данные не так, как ожидалось. Также обновлен вопрос.