我很难构建一个sql查询,该查询获取与另一个(关联的)表相关的所有相关数据,并循环到被认为是最新的那组数据(< em>或最近的)。
下图描述了我的两个表(库存和销售),库存表包含所有商品,而销售表包含所有交易记录。 Inventory.Id与Sales.Inventory_Id相关。而通缉的结果是我正在尝试的输出。
我的目标是将所有销售记录与库存相关联,但只获得每个项目的最新交易。
使用普通联接(左,右或内)并不会产生我正在调查的结果,因为我不知道如何添加另一个类别可以过滤要加入的最新数据。这是可行的还是我应该更改我的表架构?
感谢。
答案 0 :(得分:1)
我只想使用相关的子查询:
select Item, Price
from Inventory i
inner join Sales s
on i.id = s.Inventory_Id
and s.Date = (select max(Date) from Sales where Inventory_Id = i.id)
答案 1 :(得分:1)
WITH Sales_Latest AS (
SELECT *,
MAX(Date) OVER(PARTITION BY Inventory_Id) Latest_Date
FROM Sales
)
SELECT i.Item, s.Price
FROM Inventory i
INNER JOIN Sales_Latest s ON (i.Id = s.Inventory_Id)
WHERE s.Date = s.Latest_Date
如果同一日期的销售价格中有两个价格,请仔细考虑您的预期结果。
答案 2 :(得分:1)
您可以使用APPLY
Select Item,Sales.Price
From Inventory I
Cross Apply(Select top 1 Price
From Sales S
Where I.id = S.Inventory_Id
Order By Date Desc) as Sales
答案 3 :(得分:0)
select * from
(
select i.name,
row_number() over (partition by i.id order by s.date desc) as rownum,
s.price,
s.date
from inventory i
left join sales s on i.id = s.inventory_id
) tmp
where rownum = 1