ГДЕ хотя бы один из нескольких столбцов в диапазоне дат - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть таблица с идентификаторами столбцов, DATE1, DATE2, DATE3, DATE4. Я могу получить нужные мне результаты, используя следующий вопрос:

Select ID from table 
WHERE ((DATE1 >= '2020-01-01' AND DATE1 <= '2020-31-01') 
   OR (DATE2 >= '2020-01-01' AND DATE2 <= '2020-31-01') 
   OR (DATE3 >= '2020-01-01' AND DATE3 <= '2020-31-01') 
   OR (DATE4 >= '2020-01-01' AND DATE4 <= '2020-31-01') )

Итак, как вы видите, мне нужен список идентификаторов, где хотя бы один из столбцов даты (DATE1, DATE2, DATE2, DATE4 ) переносит дату в январе 2020 года.

Написанный мною запрос прекрасно работает, но мне интересно, есть ли более разумный способ написания этого запроса, чтобы мне нужно было указывать диапазон дат только один раз?

Не уверен, имеет ли это значение, но если это так, я использую DB2.

Ответы [ 2 ]

2 голосов
/ 28 февраля 2020

Используя заполнители, факторинг запросов и оператор между ними (в вашем конкретном случае c вы включаете оба конца временных интервалов), вы можете сделать пиксели более плотными и удобными для чтения.

with dates (begin_date, end_date) as
    (select ?, ? from dual)
Select ID
from table t join dates d
WHERE
    (t.DATE1 between d.begin_date AND d.end_date) OR
    (t.DATE2 between d.begin_date AND d.end_date) OR
    (t.DATE3 between d.begin_date AND d.end_date) OR
    (t.DATE4 between d.begin_date AND d.end_date)
2 голосов
/ 28 февраля 2020

Единственный способ улучшить свой запрос imho - использовать заполнители, как упоминал @Jeff Holt. Но это не изменит выполненный SQL в конце.

Другая возможность (но это полностью зависит от ваших требований) - отделить 'id' от столбцов даты и использовать отношение 1: N.

Например, действие, которое может происходить в несколько дат:

table `activity`
-------------
| id | name |
|--- | ---- |
| 1  |tennis|
-------------
table `activity_planned`
-----------------------------
| id |activity_id|   date   |
|----|-----------|----------|
| 1  | 1         |2020-02-08|
| 2  | 1         |2020-02-12|
| 3  | 1         |2020-02-11|
| 4  | 3         |2020-03-01|
-----------------------------

Таким образом, вы также можете легко добавить больше дат, чем просто 4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...