分組這裏是PRICES
簡化表結構:TSQL選擇最接近的非將來的日期範圍內按鍵
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服務工作一旦失敗消息是不是非常有幫助:(
這會更容易爲數據模型不同:)例如,正如第一的思想,*默認*價格應該是在一個完全不同的表。無論如何,這仍然是可行的...... – AakashM
爲什麼第二個查詢忽略價格爲749的記錄。我以爲你想處理像空日期(未指定)'1900-01-01'日期,並添加這些總是。 –