此查詢的目的是爲銷售的產品帶回產品及其價格,價格應該從最接近的日期開始,但不等於過去的日期,基本上是最近的可用價格。沒有每天的價格記錄。在where子句中使用匯總select語句有些問題。有一個更好的方法嗎?也許在加入標準?使用where條款中的select()函數改進Sql查詢
select
p.ProductName,
pp.Price,
pp.Date,
from product p
inner join productprice pp on p.productid = pp.productid
where
pp.evaluationdate = (select max(Date) from productprice
where productid = p.productid
and date < @DateIn)
and p.producttype = 'OnSale'
實際上查詢有點複雜,但實質上是這個問題。感謝您的輸入。
編輯 將有一個以上的產品返回
編輯 我既@Remus Rusanu的和@公里的試驗的建議(雖然@Remus Rusanu脫下)所有三個,包括我原創,在性能方面似乎差不多。我試圖決定是否以某種其他無形方式提供了對其他方面的好處,即維護,自我記錄等,因爲這將由其他人維護。再次感謝。
我認爲這可能會起作用,儘管我會限制CTE根據「onsale」標準過濾產品,但它看起來基本上是一樣的。對於子查詢,性能與CTE會有什麼不同? ProductPrice是一張大桌 – Gratzy 2009-09-30 19:19:29
我的回覆與你的回覆基本相同,所以我將其刪除。 – 2009-09-30 20:12:16