我正在尝试编写一个查询来告诉我哪些订单具有有效的促销代码。促销代码仅在特定日期和可选的特定套餐之间有效。
我什至无法解释这是如何工作的(请参阅下面的伪代码),但基本上如果有与促销代码相关联的包,那么订单必须具有这些包之一并且在有效的日期范围内,否则它只需要在有效的日期范围内。
整个“如果 PrmoPackage 行存在”的事情真的让我失望,我觉得我应该能够在没有一大堆Union
s 的情况下做到这一点。(我什至不确定这是否会让它更容易......)
有人对查询有任何想法吗?
if `OrderPromoCode` = `PromoCode`
then if `OrderTimestamp` is between `PromoStartTimestamp` and `PromoEndTimestamp`
then if `PromoCode` has packages associated with it
//yes
then if `PackageID` is one of the specified packages
//yes
code is valid
//no
invalid
//no
code is valid
命令:
OrderID* | OrderTimestamp | PackageID | OrderPromoCode
1 | 1/2/11 | 1 | ABC
2 | 1/3/11 | 2 | ABC
3 | 3/2/11 | 2 | DEF
4 | 4/2/11 | 3 | GHI
促销:
PromoCode* | PromoStartTimestamp* | PromoEndTimestamp*
ABC | 1/1/11 | 2/1/11
ABC | 3/1/11 | 4/1/11
DEF | 1/1/11 | 1/11/13
GHI | 1/1/11 | 1/11/13
促销包:
PromoCode* | PromoStartTimestamp* | PromoEndTimestamp* | PackageID*
ABC | 1/1/11 | 2/1/11 | 1
ABC | 1/1/11 | 2/1/11 | 3
GHI | 1/1/11 | 1/11/13 | 1
期望的结果:
OrderID | IsPromoCodeValid
1 | 1
2 | 0
3 | 1
4 | 0