任何人都可以解释一下,我如何创建一个select语句并从表中获取数据,但只有在特定字段更新的情况下才会这样做?假设我有:
select a, b, c, d , e, f
from table 1 t1
inner join table2 t2
on t1.a = t2.a
我很有意思,如果列 d,e,f 从昨天开始更新,比我想要在我的select语句中包含这一行,但是如果 d,e,f 从昨天开始没有更新,而忽略了这一行。在table1中,我插入了数据时的日期字段(date_created)和更新时的日期字段(date_modified)。棘手的是,table1中的数据可能会在白天由用户更新,但不是强制性字段 d,e,f ,假设用户只需更新列 a,b,c 。但date_modified列将显示该行已更新。所以我不能完全依赖于date_modified列。我的问题是,有没有其他方法如何过滤数据并得到正确的行作为回报?触发器和存储过程不是一个选项,理想情况下是纯sql ..任何帮助?
答案 0 :(得分:1)
目前还不清楚哪些列属于哪个表,但一种解决方案是使用闪回查询(假设您有足够的撤消保留以适应查询之间的24小时差异)。
在24小时前列d
,e
或f
已更改的表格上找到差异的示例是:
SELECT t.*
FROM table_name t
INNER JOIN
(
SELECT *
FROM table_name
AS OF TIMESTAMP SYSTIMESTAMP - INTERVAL '1' DAY
) p
ON ( t.a = p.a
AND ( t.d <> p.d OR t.e <> p.e OR t.f <> p.f ) );
答案 1 :(得分:0)
解决!解决方案:将一个额外的列(比如说Total)添加到目标表中,作为列 d,e,f 的总和,并首次更新它。之后,如果列 d,e,f 在白天更改,列 d,e,f 的总和将与Total列不同,您可以简单地在where子句中过滤它。 也许它不是最优雅的解决方案,但它可以完成这项工作。 谢谢你的想法!