2015-01-12 38 views
0

我想寫一個查詢,它會給我所有成員的訂單日期存在於2013年但不是在2014年的記錄。當我寫我的查詢它給了我2013年仍然存在的所有2013年記錄。我試圖只記錄2013年的訂單日期,而不是2014年。因此,它應該顯示2013年存在的記錄,並排除不存在的記錄在2014年。請幫助,因爲我真的很陌生的SQL。日期在一年中存在但不在另一個日期的SQL語法

非常感謝。

下面是我的查詢:

選擇 OMFMC.BILL_MASTER_CUSTOMER_ID, OMFMC.BILL_FIRST_NAME, OMFMC.BILL_LAST_NAME, CMI.NATIONAL_LEVEL2, MIN(OMFMC.ORDER_DATE), OMFMC.ORDER_DATE, FT。 PAYMENT_AMOUNT,

SUM(FT.PAYMENT_AMOUNT)as SUM 

FROM 客戶CUSTOMER_IN_TRIBUTE_TO

RIGHT OUTER JOIN ORDER_FND_DETAIL OFD 
    ON (CUSTOMER_IN_TRIBUTE_TO.MASTER_CUSTOMER_ID=OFD.IN_TRIBUTE_TO_MAST_CUST 
    and CUSTOMER_IN_TRIBUTE_TO.SUB_CUSTOMER_ID=OFD.IN_TRIBUTE_TO_SUB_CUST) 


RIGHT OUTER JOIN ORDER_MBR_FND_MTG_CUS_INFO_VW OMFMC 
    ON (OMFMC.ORDER_NO=OFD.ORDER_NO 
    and OMFMC.ORDER_LINE_NO = OFD.ORDER_LINE_NO ) 


LEFT OUTER JOIN CUS_CURRENT_MEMBERSHIP_INFO CMI 
    ON (CMI.MASTER_CUSTOMER_ID=OMFMC.BILL_MASTER_CUSTOMER_ID 
    and CMI.SUB_CUSTOMER_ID=OMFMC.BILL_SUB_CUSTOMER_ID) 


LEFT OUTER JOIN FAR_TXN FT 
    ON (FT.ORDER_NO=OMFMC.ORDER_NO 
    and FT.ORDER_LINE_NO=OMFMC.ORDER_LINE_NO) 

WHERE

OMFMC.ORDER_STATUS_CODE='A' 
AND OMFMC.LINE_STATUS_CODE = 'A'   
AND OMFMC.ORDER_STATUS_CODE = 'A' 
AND OMFMC.LINE_STATUS_CODE = 'A' 
AND OMFMC.ORDER_DATE BETWEEN '1/1/2013' and '12/31/2013' 
AND OMFMC.ORDER_DATE Not BETWEEN '1/1/2014' and '12/31/2014' 
AND OMFMC.BILL_CUSTOMER_CLASS_CODE NOT IN ('TEST_MBR','STAFF') 
AND FUND in ('FOSFN' , 'MFUND') 

GROUP BY OMFMC.BILL_MASTER_CUSTOMER_ID, OMFMC.BILL_FIRST_NAME, OMFMC.BILL_LAST_NAME, OMFMC.BILL_LABEL_NAME, OMFMC.BILL_PRIMARY_EMAIL_ADDRESS, OMFMC.BILL_ADDRESS_1, OMFMC.BILL_ADDRESS_2 , OMFMC.BILL_CITY, OMFMC.BILL_STATE, OMFMC.BILL_POSTAL_CODE, CMI.NATIONA L_LEVEL2, OMFMC.ORDER_DATE, FT.PAYMENT_AMOUNT

HAVING SUM(FT.PAYMENT_AMOUNT) < 0 

Order By BILL_MASTER_CUSTOMER_ID 

在訂單日期領域,是具有2013日期,和2014年的日期。我希望我的查詢能夠查看2013年和2014年的訂單日期,並且只需提取2013年的訂單日期。不是具有2013年和2014年日期的記錄。如果他們在2013年和2014年有訂單,那麼我想排除這些記錄。因此,例如:

enter code here 

Bill_Member_ID .......... ORDER_DATE
123 .................... 01/05/2013
123 .................... 01/27/2013
123 ................ ... 02/15/2014
123 .................... 02/18/2014
456 .......... .......... 01/07/2013
789 .................... 01/05/2013
789 .... ............... 。2014年2月17日
992 .................... 2013年3月15日

於是我應該得到的

回報

Bill_Member_ID ..........order_date的

456 .................... 2013年1月7日
992 .............. ...... 2013年3月15日

謝謝你這麼多

回答

0

你需要的是一個簡單的子查詢,以及它的結果反饋到你的最外層選擇要顯示的結果。

您所追求的是Bill_Member_ID的訂單,其訂單日期爲2013年1月1日至2013年12月31日(含),但未在2014年1月1日至2014年之間訂購日期 - 12-13。所以,讓我們建立我們的僞代碼選擇。我們從裏到外(從最裏面開始,並按照選擇的最外層工作)。

一起來,產生誰擁有的訂單在2014年成員名單所以這是

Select Bill_Member_ID 
From Order_Table 
WHERE Year(OrderDate) = '2014'; 

我們從進料,作爲下一個選擇的條件。這下一層的工作是選擇所有誰擁有在2013年的訂購日期的成員,但不是在2014年

Select Bill_Member_ID 
    From Order_Table 
    WHERE Year(OrderDate) = '2013' AND Bill_Member_ID Not In 
    (
     Select Bill_Member_ID 
     From Order_Table 
     WHERE Year(OrderDate) = '2014' 
    ) 

這就產生你的Bill_Member_ID誰擁有訂單2013單,但不是在2014年加入的附加列你需要你的最終選擇。此外,添加其他過濾條件(即不測試而不是員工)以根據需要縮小結果。

這真的是您需要做的所有事情來生成您的客戶名單。如果您沒有使用不支持指定年份的數據庫,那麼您需要使用日期之間的過濾條件範圍內的where日期字段。

+0

非常感謝StarPilot!這做到了。 :) –

+0

不客氣。很高興爲你工作。在SO,我們希望有解決問題的答案作爲實際答案。 – StarPilot

相關問題