大家好我有一个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
提前致谢!
答案 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
希望这有帮助