の簡略化されたテーブル構造は次の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
列は、価格が有効になる期間を指定します。null の日付 (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サービスを操作することはあまり役に立ちません:(