私は2つのテーブルを持っています:
素材:
ID
価格:
BookPrice
PriceDate
MaterialID
すべての材料とその最後の価格を取得したい (最新の価格行PriceDate
)。
SQL Server を使用しています。
前もって感謝します!
私は2つのテーブルを持っています:
素材:
ID
価格:
BookPrice
PriceDate
MaterialID
すべての材料とその最後の価格を取得したい (最新の価格行PriceDate
)。
SQL Server を使用しています。
前もって感謝します!
次のことを試してください。
SELECT c.ID, d.BookPrice, d.PriceDate
FROM Material as c
INNER JOIN
(SELECT MaterialID, BookPrice, PriceDate
FROM Price as a
WHERE PriceDate =
(SELECT MAX(PriceDate)
FROM Price as b
WHERE a.MaterialID = b.MaterialID
)
) as d
ON c.ID = d.MaterialID
必要に応じてさらに調査するには、 SQLFiddle の例を参照してください。
そのためにouter applyを使用します:
select M.ID, P.BookPrice
from Material as M
outer apply (
select top 1 P.BookPrice
from Price as P
where P.MaterialID = M.ID
order by P.PriceDate desc
) as P
row_number()を使用することもできますが、通常は外部適用アプローチよりも遅くなります。
with cte as (
select
M.ID, P.BookPrice,
row_number() over(partition by M.ID order by P.PriceDate) as row_num
from Material as M
left outer join Price as P on P.MaterialID = M.ID
)
select
c.ID, c.BookPrice
from cte as c
where c.row_num = 1