2011-10-07 141 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

我已经更新了我的答案有什么,我认为是正确的基础上我的理解什么什么更详细的编辑您的原职要求 –