Обобщить запрос, чтобы получить все данные для заданного диапазона - PullRequest
0 голосов
/ 06 мая 2019

У меня есть запрос выбора, который выбирает данные между двумя периодами даты / времени, как показано ниже

SELECT *
FROM table1
WHERE table1 .row_creation > TO_DATE ('2017-04-03 11:00:00 AM','yyyy-mm-dd hh:mi:ss pm')
AND table1 .row_creation   < TO_DATE('2017-04-04 03:00:00 AM','yyyy-mm-dd hh:mi:ss pm')
AND NOT EXISTS 
  (SELECT *
  FROM table1
  WHERE                    <cond>
  AND table1 .row_creation > TO_DATE ('2017-04-03 11:00:00 AM','yyyy-mm-dd hh:mi:ss pm')
  AND table1 .row_creation < TO_DATE('2017-04-04 03:00:00 AM','yyyy-mm-dd hh:mi:ss pm')
  )

Я хочу изменить этот запрос, чтобы получать данные для всех последовательных дней недели в месяце за один раз. Кто-нибудь может дать мне какое-нибудь руководство?

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

Я думаю, что вы можете упростить это для всего апреля 2017 года, как здесь:

select * 
  from (
    select a.*, 
           count(case when cond='X' then 1 end) over (partition by trunc(row_creation-3/24)) cnt
      from table1 a
      where row_creation - 3/24 between date '2017-04-01' and date '2017-05-01'
        and to_char(row_creation, 'hh24') not between '03' and '10')
  where cnt = 0

, где

row_creation - 3/24

назначает даты с часами 00:00 - 03:00 предыдущимday,

count(case when <cond> then 1 end) over (partition by trunc(row_creation - 3/24))

считает нежелательных строк за этот день, и, наконец:

where cnt = 0

отвечает за удаление строк, если был хотя бы один нежелательный случай на этот день.

пример dbfiddle

0 голосов
/ 06 мая 2019

Добавьте больше столбцов в группу по предложению, если хотите.

SELECT TO_CHAR(row_creation,'W') FROM table1 WHERE table1 .row_creation between TO_DATE ('2017-04-03 11:00:00 AM','yyyy-mm-dd hh:mi:ss pm') AND TO_DATE('2017-04-04 03:00:00 AM','yyyy-mm-dd hh:mi:ss pm') AND NOT EXISTS ( SELECT * FROM table1 WHERE AND table1.row_creation BETWEEN TO_DATE ('2017-04-03 11:00:00 AM','yyyy-mm- dd hh:mi:ss pm') AND TO_DATE('2017-04-04 03:00:00 AM','yyyy-mm-dd hh:mi:ss pm') ) AND TO_CHAR(row_creation,'DAY') NOT IN ('SATURDAY','SUNDAY') GROUP BY TO_CHAR(row_creation,'W')

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