-1

私は2つのテーブルを持っています:

素材:

ID

価格:

BookPrice
PriceDate
MaterialID

すべての材料とその最後の価格を取得したい (最新の価格行PriceDate)。

SQL Server を使用しています。

前もって感謝します!

4

2 に答える 2

1

次のことを試してください。

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 の例を参照してください。

于 2013-09-05T07:22:31.640 に答える
1

そのために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
于 2013-09-05T06:15:54.050 に答える