SQL Where子句,用于在连接表日期的30天时间范围内返回记录

时间:2016-07-24 12:11:46

标签: sql oracle date oracle-sqldeveloper

大家好我有一个SQL问题。我有一个我创建的表,我想在我的查询中加入。

下面的示例(我创建的目的是为了不共享原始数据)。我认为where声明将成为我需要帮助的重要部分。

ALL - 包含数据库中的数据,包括日期。

WEB(下方) - 表I已添加

DATE        ID       ORDER NUMBER
21/06/2016  RED      11148
22/06/2016  BLUE     16996
23/06/2016  RED      11000
24/06/2016  GREEN    17783
25/06/2016  RED      12487
26/06/2016  BLUE     12837
27/06/2016  RED      11755
28/06/2016  GREEN    11698

我的查询开始是:

SELECT
I.DATE,
I.ORDER_NUMBER,
I.ID,
I.FLOW,
I.MEDIUM,
I.REASON,
I.SUB_REASON 

FROM WEB D
JOIN ALL I
ON D.ORDER_NUMBER = I.ORDER_NUMBER

我需要的是一个WHERE语句来生成以下内容 - 我想从ALL中撤回所有内容,这是从WEB中每个DATE开始加30天。

所以要澄清是否

DATE        ID       ORDER NUMBER
21/06/2016  RED      11148

存在于WEB中我想从2016年6月21日(WEB中保存的日期)之后的30天内从ALL中提取所有匹配的ORDER_NUMBER。

所以输出看起来像这样。如您所见,返回的日期是在加入的表格中的日期后30天内。

DATE       ORDER_NUMBER    ID     FLOW     MEDIUM     REASON     SUB_REASON
26/06/2016 11148           RED    IN       WEB        IN         ONLINE

提前致谢!

2 个答案:

答案 0 :(得分:1)

尝试: WHERE i.DATE BETWEEN d.DATE AND d.DATE+30
在抽象您的真实数据时,您忽略了日期是一个保​​留字,因此每次出现都需要双引号,例如 WHERE i."DATE" BETWEEN d."DATE" AND d."DATE"+30

答案 1 :(得分:0)

将BETWEEN与sysdate和sysdate-30一起使用,如下所示

SELECT
  I.DATE,
  I.ORDER_NUMBER,
  I.ID,
  I.FLOW,
  I.MEDIUM,
  I.REASON,
  I.SUB_REASON 
FROM WEB D
  JOIN ALL I ON D.ORDER_NUMBER = I.ORDER_NUMBER
WHERE I.DATE BETWEEN sysdate-30 and sysdate

希望这有帮助