我有一個表(車輛),其中包含車輛列表。三個表SQL查詢
VehicleID
PlateNo
CurrentDriver
我也有一個表(歷史),它包含了車輛一司機歷史:
HistoryID
VehicleID
ReceivedDate (vehicle receiving date)
DriverName
我有另一個表(維修),它包含了所有車輛的修理:
RepairID
VehicleID
RepairDate
RepairCost
使用SQL Server並基於歷史記錄表,我想獲取給定DriverName的兩個日期之間的所有RepairCost值。
例如,我希望在2013年1月1日到2013年5月1日之間獲得司機'John Doe'的所有RepairCost值,並在此期間分配給三輛不同的車輛。
我的查詢到目前爲止是:
SELECT H.DriverName, R.RepairCost, R.RepairDate
FROM Repairs AS R
INNER JOIN Vehicles AS V ON R.VehicleID = V.VehicleID
INNER JOIN History H ON H.VehicleID = V.VehicleID
WHERE H.DriverName = 'John'
AND R.RepairDate BETWEEN '01.01.2013' AND '04.01.2013'
還有就是在一些SQL Fiddle樣本數據。
問題似乎是我得到了所有結果兩次。
以後編輯: 我迄今取得的進展:
DECLARE @Driver varchar(50),@StartDt datetime, @EndDt datetime
SELECT @Driver = 'John Doe',@StartDt = '20130101' ,@EndDt = '20130501'
;With VehicleAllocation
AS
(
SELECT h.*,h1.ChangeDate
FROM History h
OUTER APPLY (SELECT MIN(ReceivedDate) AS ChangeDate
FROM History
WHERE VehicleID = h.VehicleID
AND DriverName <> h.DriverName
AND ReceivedDate > h.ReceivedDate
)h1
WHERE h.DriverName = @Driver
)
SELECT *
FROM VehicleAllocation h
INNER JOIN Repairs r
ON r.VehicleID = h.VehicleID
WHERE DriverName = @Driver
AND RepairDate > = @StartDt
AND RepairDate < @EndDt + 1
AND RepairDate BETWEEN h.ReceivedDate AND COALESCE(h.ChangeDate,RepairDate)
我discoverd問題與行 'AND的DriverName <> h.DriverName'。爲什麼這條線有用?如果我在「歷史記錄」表中一個接一個地輸入相同的驅動程序名稱,它將跳至該驅動程序名稱的最後一個送貨日期。
的樣本數據:
'歷史記錄' 表
ReceivedDate DriverName
04.11.2013 Mike
13.11.2013 Dan
15.11.2013 Dan
17.11.2013 Ryan
20.11.2013 Dan
22.11.2013 Ryan
25.11.2013 Mike
26.11.2013 Dan
29.11.2013 Ryan
04.12.2013 Dan
'修理' 表
RepairDate RepairCost
05.11.2013 2615.30
14.11.2013 135.66
16.11.2013 4913.04
18.11.2013 538.92
21.11.2013 152.48
23.11.2013 5946.89
26.11.2013 3697.64
27.11.2013 734.01
30.11.2013 279.62
查詢結果
RepairDate RepairCost
07.11.2013 380.00
14.11.2013 135.66
16.11.2013 4913.04
16.11.2013 4913.04
21.11.2013 152.48
27.11.2013 734.01
正如你可以在查詢結果中看到,第3行和第4行有s ame值/日期。 查詢的時間間隔是01-01-2013 < - > 31-12-2013。
另外,如果我想從不同的表格中獲得不同colums的SUM值? 例如,'Repairs'表中的SUM(Total)列,'Tyres'表中的SUM(Value)列...
如何修改腳本?
謝謝!
您是否可以發佈您的嘗試查詢?你得到什麼錯誤?結果是否與預期不同? – Oded
到目前爲止,我已經使用SQL小提琴向您顯示我的查詢:http://sqlfiddle.com/#!3/fcebf/3 – milo2011
看來結果加倍了。 – milo2011