做一點「思考」,這應該可以幫助你建立一些查詢。
您有一套customers
和一套sales
。這些交集是customers
誰買了你的產品;加入這些表來找出他們是誰。
另一個要求是他們有'沒有未完成的訂單'。您說status
字段告訴您訂單是否「打開」,因此這將構成您的WHERE
子句的一部分,以過濾銷售行。
看看是否讓你開始,嘗試一些東西,如果你在發佈查詢後停滯不前,並尋求關於特定問題的幫助。此刻的你只是要求人們編寫查詢你:)
編輯:
看着你已經添加有什麼您最初說了一些不一致的查詢。
你提到Customer
和Sales
表,但使用的是tblarInvoice
(發票?)tblsoSO
(sales_order的?)。我將簡化問題並假設關於訂單的所有信息都在一張表中Sales_Order
;您可以修改查詢以使用您擁有的實際表格。
您需要定義「過去6個月未訂購」的實際含義。你有兩個帶日期的字段;我假設date_ordered
必須超過6個月前,並忽略dateprinted
,因爲這聽起來像稍後發生的事情。
我們可以利用DATEDIFF
扣除6個月的當前日期,所以每當您運行查詢,你會得到一個「滾動」最近6個月:
SELECT customer
FROM Sales_Order
WHERE date_ordered <= DATEADD(month, -6, CURRENT_TIMESTAMP)
你也想將一組客戶排除任何具有「開放」訂單的人:
SELECT DISTINCT
SO1.customer
FROM (SELECT customer
FROM Sales_Order
WHERE order_status = 'closed'
) SO1
LEFT JOIN (SELECT customer
FROM Sales_Order
WHERE order_status = 'open'
) SO2 ON SO1.customer = SO2.customer
WHERE SO2.customer IS NULL
現在將其與最近6個月未訂購的客戶組合在一起。 BTW我並不是說這是編寫查詢最好辦法,我只是試圖更容易理解:
SELECT DISTINCT
SO1.customer
FROM (SELECT customer
,date_ordered
FROM Sales_Order
WHERE order_status = 'closed'
) SO1
LEFT JOIN (SELECT customer
FROM Sales_Order
WHERE order_status = 'open'
) SO2 ON SO1.customer = SO2.customer
WHERE SO2.customer IS NULL
AND date_ordered <= DATEADD(month, -6, CURRENT_TIMESTAMP)
你試過形成一個查詢?如果是這樣,你可以發佈該查詢,以便我們可以進一步幫助? – j03z
再次閱讀您的要求後,我想檢查;您需要「......我們的客戶在6個月內沒有從我們那裏購買,也沒有任何未完成的銷售訂單。」 - 這是否意味着您可以有一位6個月前訂購的顧客,訂單仍然「開放」? – Tony
正確的是,這將是一個可以返回多達一年的全面訂單的客戶。這就是我檢查S.status的原因。如果S.status已打開,那麼我不想將客戶包含在結果集中。 – user3246538