Получение строк данных за последние 7 дней с помощью sql в Oracle



Борется с запросом, который возвращает строки данных, включая некоторые строки за последние 7 дней. Там много левых столов, и, похоже, я что-то пропустил. вот пример моего кода до сих пор:



select a.a,
b.b,
c.c,
d.d,
e.e,
f.f,
s.start_date,
ack.acknowledge_date,
fin.finish_date,
g.g,
h.h,
i.i
from table_a a,
inner join table_b b on ... = ...,
left join table_c c on ... = ...,
left join table_d d on ... = ... `


И так далее.



Я хотел бы получить строки данных (если таковые имеются!) из столбцов s. start_date, ack.подтверждение_дата и
Плавник.finish_date за последние 7 дней (я предполагаю, что это (sysdate -7)). Однако, если я сделаю следующее:



select a.a,
b.b,
c.c,
...,
...,
...,
from ...
inner join ...
on ... = ...
left join ...
on ... = ...
left join`...
on ... = ...

where s.start_date >= sysdate -7 and
ack.acknowledge_date >= sysdate -7 and
fin.finish_date >= sysdate -7;


Тогда у меня 0 строк в ответ. Но в идеале запрос должен возвращать все строки из всех таблиц, и если какие-либо строки в этих полях дат он должен возвращать их тоже, если нет данных в этих полях дат, то оставьте его пустым, но все остальные строки должны возвращаться как обычно.

1133   2  

2 ответов:

Не ставьте условия OUTER таблицы в Предложение WHERE, если это OUTER JOIN. Переместите их в предложение ON вместо этого!

LEFT JOIN <...> ON <...> = <...>
               AND s.start_date >= sysdate -7

Используйте OR вместо AND

WHERE s.start_date >= sysdate -7
      OR ack.acknowledge_date >= sysdate -7
      OR fin.finish_date >= sysdate -7;

Comments

    Ничего не найдено.