这是简化的表结构PRICES
:
SKU PriceType FromDate ToDate Price .............................................................. SUR40 NONMEMBER 1900-01-01 1900-01-01 1000 SUR40 RSP 1900-01-01 1900-01-01 1500 SUR40 MEMBER 2012-07-04 2012-07-04 649 SUR40 MEMBER 2012-06-15 2012-06-15 699 SUR40 MEMBER 2012-06-01 2012-06-01 599 SUR40 MEMBER 2012-03-31 2012-03-31 699 SUR40 MEMBER 1900-01-01 1900-01-01 749
此PRICES
表存储所有产品的所有价格。FromDate
和ToDate
列指定价格应该生效的时间段。如果指定日期没有促销活动,则默认价格为空日期(返回为 1900-01-01)。
给定 SKU 和日期,查询应返回适用于该日期的产品价格。例如,使用 2012-06-16 选择应该返回:
SUR40 NONMEMBER 1900-01-01 1900-01-01 1000 SUR40 RSP 1900-01-01 1900-01-01 1500 SUR40 MEMBER 1900-01-01 1900-01-01 749
使用 2012-06-15 选择应该返回:
SUR40 NONMEMBER 1900-01-01 1900-01-01 1000 SUR40 RSP 1900-01-01 1900-01-01 1500 SUR40 MEMBER 2012-06-15 2012-06-15 699
SQL 服务器是 MS SQL 2008 R2。自从我编写上一个 SQL 查询以来已经有一段时间了,我似乎无法理解这一点。:(
任何帮助将不胜感激。到目前为止,这是我想出的:
select SKU, PriceType, FromDate, ToDate, Price from PRICES
where SKU IN ('SUR40')
and PriceType IN ('NONMEMBER','RSP','MEMBER')
and FromDate < GETDATE()
order by PriceType, FromDate DESC
我认为应该有一个group by
地方,但是使用在失败时不返回错误消息的 Web 服务不是很有帮助:(