2

特定のデバイスの最後の販売を見つけようとしています。

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

  1. 機械
  2. 販売。

彼らは経由して参加していますMachines.MahineID = Sales.MachineID

これが私がこれまでに持っているものです:

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

これにより、特定のマシンのすべての売上が得られますが、特定のマシンの最新の売上のみが必要です。また、機械が一度も販売されたことがないかどうかも知りたいです。したがって、左外部結合です。

4

2 に答える 2

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
于 2012-07-01T20:26:52.680 に答える
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後日発生した同じマシン上の他の販売があるかどうかをチェックする相関クエリがあります。

于 2012-07-01T20:18:22.663 に答える