2016-07-24 111 views
1

大家好我有一個SQL問題。我有一個我創建的表格,我想在查詢中使用它。SQL Where子句在30天內加入表日期的時間範圍

下面的示例(我已創建,以便不共享原始數據)。我相信這將成爲我需要幫助的重要部分。

ALL - 包含數據庫中的數據,包括日期。

WEB(下) - 表我已經加入

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語句產生如下 - 我想拉從WEB中的每個DATE加上30天后的所有內容。

所以要澄清,如果存在於WEB

DATE  ID  ORDER NUMBER 
21/06/2016 RED  11148 

我想拉的所有匹配ORDER_NUMBER從所有這一切都發生在30天內發佈21/06/2016(在WEB舉行的日期)。

所以輸出看起來像這樣。正如你所看到的,返回的日期在加入表格中的日期之後的30天內。

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

在此先感謝!

+0

爲了澄清,提供'ALL'的樣本數據和期望的結果。 –

回答

1

嘗試: WHERE i.DATE BETWEEN d.DATE AND d.DATE+30
在抽象的真實數據,你忽略了這個日期是一個保​​留字等等每個事件都需要雙引號,例如 WHERE i."DATE" BETWEEN d."DATE" AND d."DATE"+30

+0

我想這可能是我之後只有問題是我的數據集都很大,所以它可能會超載一點。如果我能爲它出口,我會標記爲已回答。謝謝 – nohholmez

0

與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 

希望這有助於

+0

謝謝。那我怎麼會坐在我的查詢結尾(我是這個新手),它會和WEB表匹配嗎,還是隻回收一切? – nohholmez

+0

如果沒有使用這個編輯過的查詢,你在where子句中是否有其他條件 –