加入两个表但只获取最近的关联记录

时间:2014-07-24 16:20:26

标签: sql sql-server

我很难构建一个sql查询,该查询获取与另一个(关联的)表相关的所有相关数据,并循环到被认为是最新的那组数据(< em>或最近的)。

下图描述了我的两个表(库存和销售),库存表包含所有商品,而销售表包含所有交易记录。 Inventory.Id与Sales.Inventory_Id相关。而通缉的结果是我正在尝试的输出。

我的目标是将所有销售记录与库存相关联,但只获得每个项目的最新交易。

enter image description here

使用普通联接(左,右或内)并不会产生我正在调查的结果,因为我不知道如何添加另一个类别可以过滤要加入的最新数据。这是可行的还是我应该更改我的表架构?

感谢。

4 个答案:

答案 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

SQLFiddle demo