查找范围内的记录+/-在三天的日期范围内在

问题描述:

我有一个表TABLE1,其中有日期字段,它说TXN_DATE,我有另一个表TABLE2,其中还有一个名为TXN_DATE的日期字段,我需要匹配TABLE1.TXN_DATE在TABLE2.TXN_DATE的+3或-3天之间的表中的记录。查找范围内的记录+/-在三天的日期范围内在

任何帮助将不胜感激。

+0

您已经标记了甲骨文和MySQL - 它们是两种不同的RDBMS - 哪一个是你问的问题吗? – MT0

+0

首先,正确标记。如果我们为错误的dbms发布解决方案,这是毫无用处的。其次,学习如何提问。这是一个很好的链接。 https://*.com/help/how-to-ask。第三,你到目前为止尝试过什么? – Eric

+0

删除标签状态为“Oracle”中的MySQL标签。 – MT0

Select t1. column_name 
From TABLE1 t1, Table2 t2 
Where 
(
(T1.TXN_DATE=(T2. TXN_DATE +INTERVAL 1 DAY)) or (T1.TXN_DATE=(T2. TXN_DATE +INTERVAL 2 DAY)) or (T1.TXN_DATE=(T2. TXN_DATE +INTERVAL 3 DAY)) or (T1.TXN_DATE=(T2. TXN_DATE - INTERVAL 1 DAY)) or (T1.TXN_DATE=(T2. TXN_DATE - INTERVAL 2 DAY)) or (T1.TXN_DATE=(T2. TXN_DATE - INTERVAL 3 DAY)) 
) ; 
+0

如果间隔1天和2小时,这将与Oracle中的日期不符。 – MT0

+0

你的意思是3天零2小时? –

+0

不,我的意思是如果(在Oracle中)'T1.TXN_DATE = CAST(TIMESTAMP'1970-01-01 00:00:00'AS DATE)'和'T2.TXN_DATE = CAST(TIMESTAMP'1970-01-02 02 :00:00'AS DATE)',那么它们相隔不到3天,但是你的查询不会与它们匹配,因为它只查看整天的值而不是查找日期范围。 – MT0

Oracle解决方案:

SELECT * 
FROM table1 t1 
     INNER JOIN 
     table2 t2 
     ON (t1.TXN_DATE BETWEEN t2.TXN_DATE - INTERVAL '3' DAY 
          AND t2.TXN_DATE + INTERVAL '3' DAY);