2011-10-07 139 views
-2

我有一個複雜的查詢,我需要從這個查詢結果中排除的產品列表,如果有日期範圍是在某個日期之前,但包括如果該日期前後排除記錄。每條記錄都有自己的日期,但排除/包含的日期是固定的。SQL視圖 - 日期範圍

我從另一個視圖獲得產品列表。

我的SQL是生鏽(我通常編寫了很多目標C),請有人可以幫我如何寫這個查詢的想法?

樣品查詢:

選擇AuthDate,產品編號,* 從ProductOrders

的ProductOrders表包含了一堆訂單,爲所有類型的產品,在這裏我要排除的產品列表,來自另一個視圖(vwExcludeProducts)僅當AuthDate在2011年9月1日之前的某個日期之前,但包括2011年9月1日之後。

vwExcludeProducts僅返回產品列表的ProductId,以排除b,因此我認爲我需要將此視圖與ProductOrders表一起加入,並且只有l OOK它如果AuthDate是< 9月1日2011年

ProductOrders樣本數據:

產品編號|說明| AuthDate 1說明1 2011-08-30 2說明2 2011-08-30 3說明3 2011-08-30 4說明4 2011-08-30 5說明5 2011-09-01

在這種情況下,vwExcludeProducts查看我想隱藏產品編號4,所以應該隱藏,但顯示其他人的回報...如果vwExcludeProducts還含有5產品編號,然後它不會因爲它的後隱藏/包括9月1日2011年

謝謝

+3

如果你騰出更多的精力與你的問題,例如告訴我們您的表和字段的名稱或告訴我們您正在使用您想要達到的數據集和什麼,我敢肯定有人會發布SQL做這個。 –

+0

hugh>查看我的更新。 – Lennie

回答

1

像這樣?:

SELECT AuthDate, ProductId, * 
FROM ProductOrders 
WHERE (NOT EXISTS (SELECT 1 FROM vwExcludeProductOrders WHERE ProductId = ProductOrders.ProductId) AND AuthDate < '2011-09-01') 
OR AuthDate >= '2011-09-01' 

顯然使用*來選擇所有的列是不是最好的做法,您應該指定正是你需要檢索的列,但沒有有關要求的信息也很難知道有什麼建議。

+0

正確的是,但僅適用於給定的產品集合...此ProductOrders表格包含一系列必須包含的產品,但對於必須在2011年9月1日之前排除的某些產品集合,並且在此日期之後包含。 – Lennie

+0

我真的覺得你需要對錶結構,你正在努力實現的,因爲我不理解你需要 –

+0

我已經更新了我的答案有什麼,我認爲是正確的基礎上我的理解什麼什麼更詳細的編輯您的原職要求 –