在 Oracle 中使用 sql 获取过去 7 天的数据行
Get data rows for past 7 days using sql in Oracle
正在努力查询 returns 数据行,其中包括过去 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.acknowledge_date 和 ack.acknowledge_date 列中获取数据行(如果有的话!)
Fin.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;
然后我在 return 中有 0 行。但理想情况下,查询应该 return 所有表中的所有行,如果这些日期字段中有任何行,它也应该 return 它们,如果这些日期字段中没有数据,则将其留空,但所有其他行应该return 正常。
如果是 OUTER JOIN
,请不要在 WHERE
子句中添加 OUTER
table 条件。将它们移至 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;
正在努力查询 returns 数据行,其中包括过去 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.acknowledge_date 和 ack.acknowledge_date 列中获取数据行(如果有的话!) Fin.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;
然后我在 return 中有 0 行。但理想情况下,查询应该 return 所有表中的所有行,如果这些日期字段中有任何行,它也应该 return 它们,如果这些日期字段中没有数据,则将其留空,但所有其他行应该return 正常。
如果是 OUTER JOIN
,请不要在 WHERE
子句中添加 OUTER
table 条件。将它们移至 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;