我正在使用MySQL 5.6.39版 .
对于我正在处理的应用程序,我有以下ERD .
我想写一些SQL会给我这个:
基本上,对于给定的帐户参考,在旅程开始和结束之间,我希望选择AccelerationScore,BreakingScore,CorneringScore,SpeedingScore和DrivingScore .
这是 code 我有:
SELECT
v.VehicleReference,
j.EndDateTime,
COUNT(sp.SpeedingEventId) AS SpeedingCount
FROM
AccountAndDevices.Journey j
INNER JOIN
AccountAndDevices.Device d ON j.DeviceId = d.DeviceId
INNER JOIN
AccountAndDevices.Vehicle v ON d.VehicleId = v.VehicleId
INNER JOIN
AccountAndDevices.Account a ON a.AccountId = v.AccountId
LEFT OUTER JOIN
AccountAndDevices.SpeedingEvent sp On j.DeviceId = sp.DeviceId
AND
sp.DateTime BETWEEN j.StartDateTime AND j.EndDateTime
WHERE
a.AccountReference = 'TestUser03@example.com'
AND
JourneyId =
(SELECT
JourneyId
FROM
AccountAndDevices.Journey j
INNER JOIN
AccountAndDevices.Device d ON j.DeviceId = d.DeviceId
INNER JOIN
AccountAndDevices.Vehicle v ON d.VehicleId = v.VehicleId
INNER JOIN
AccountAndDevices.Account a ON a.AccountId = v.AccountId
WHERE
a.AccountReference = 'TestUser03@example.com'
AND
j.EndDateTime <= NOW()
ORDER BY
j.EndDateTime
DESC
LIMIT
1)
GROUP BY
v.VehicleReference,
j.EndDateTime;
这让我很接近,但它缺少所有分数,我正在努力从JourneyScores表中获得分数并将其类型(在ScoreType表中)作为列 Headers .