给定机器的最后销售

时间:2012-07-01 20:15:05

标签: sql tsql

我正在努力寻找给定设备的最后一次销售。

我有2张桌子

  1. 机器
  2. 销售。
  3. 他们通过Machines.MahineID = Sales.MachineID

    加入

    这是我到目前为止所做的:

    Select Machines.Name, Sales.DateOfSale from Machines 
    Left Outer join Sales on Sales.MachineId = Machines.MachineId
    

    这给了我给定机器的所有销售,但是我想要给定机器的最新销售。我还想知道一台机器是否从未进行过销售。因此左外连接。

2 个答案:

答案 0 :(得分:2)

如果您只需要姓名和最后一笔销售:

select Machines.Name, max(Sales.DateOfSale)
from Machines 
left join Sales on Sales.MachineId = Machines.MachineId
group by Machines.Name

如果您需要最后一条记录中的其他列:

select Machines.Name, Sales.*
from Machines 
left join (
  select MachineId, max(DateOfSale) max_DateOfSale
  from Sales
  group by MachineId
) max_Sales
  on max_Sales.MachineId = Machines.MachineId
left join Sales
  on Sales.MachineId = Machines.MachineId
  and Sales.DateOfSale = max_Sales.max_DateOfSale

答案 1 :(得分:1)

你可以试试这个:

Select Machines.Name, Sales.DateOfSale
from Machines 
Left Outer join Sales s on Sales.MachineId = Machines.MachineId
where not exists (
    select *
    from Sales os                      -- Other sale...
    where s.MachineId = os.MachineId   -- Same machine
      AND os.DateOfSale > s.DateOfSale -- later date
)

有一个相关的exists查询,用于检查同一台计算机上是否存在以后发生的其他销售。