我有一個包含引擎(EngineId,Make,Model,SerialNumber等)的表的數據庫和引擎上具有Test值的表(TestId,EngineId,值1,值2等)。帶有連接的SQL查詢,但只想要連接表中的最新記錄
我想從引擎表中選擇所有記錄以及最新的測試值(可能有多個測試記錄,但我只想要最新的)。這看起來很簡單,但由於某種原因,我無法完全掌握SQL語法。
我可以從類似下面的東西開始,但然後我卡住了。
SELECT e.*, t.Value1, t.Value2
FROM Engine e
left join Event ev on e.EngineID = ev.EngineID
left join Test t on ev.EventID = t.EventID
WHERE ev.EventType = 'TEST'
我可以關閉以下內容,但它只返回帶有測試數據的記錄。我想沒有測試數據返回引擎記錄:
SELECT e.*, t.Nox, t.CO
FROM Engine e
left join Event ev on e.EngineID = ev.EngineID
left join Test t on ev.EventID = t.EventID
left join EventType et on ev.EventTypeId = et.EventTypeID
WHERE Upper(et.Name) = 'TEST'
AND ev.EventDate= (SELECT MAX(EventDate)
FROM Event ev2
left join EventType et2 on ev2.EventTypeID = et2.EventTypeID
WHERE ev2.EngineID = e.EngineID AND
Upper(et2.Name) = 'TEST')
我可以親近下面,但我仍然需要加入以某種方式測試表:
SELECT DISTINCT e.*, om.maxdate
FROM Engine e
LEFT JOIN (
select ev2.EngineID, max(EventDate) as maxdate
from Event ev2
LEFT JOIN EventType et on ev2.EventTypeID = et.EventTypeID
WHERE Upper(et.Name) = 'TEST'
group by EngineID
) om on e.EngineID = om.EngineID
--LEFT JOIN Test t on om.EventID = t.EventID
我可以做,如果一個存儲過程幫助。
你問了一些示例數據,所以在這裏。我想要返回所有的引擎記錄以及最新的測試值。
引擎
EngineId Make Model SerialNumber
1 Waukesha 5794 C-62124
2 Waukesha 5800 F-199374
3 NULL NULL B-200305
4 Waukesha 6000 D-999777
5 Waukesha 6100 E-877324
6 Briggs & Stratton LW300 SL-122375
7 Briggs & Stratton LW350 SL-375200
8 Briggs & Stratton GS250 LS-988755
9 Briggs & Stratton 5794 SN12345
測試
TestID EventID EngineID TestDate Description Value1 Value2
1 7 1 03/01/17 12:00 AM Testing 30 50
9 8 1 01/01/17 12:00 AM Testing 20 20
17 11 1 12/01/16 12:00 AM Testing 16 15
更新您的問題添加適當的數據樣本和預期的結果 – scaisEdge
請與您的數據樣本和預期結果提供爲好。 –