J'ai une requête MySQL où je suis en train de faire:MYSQL - Sélection de la date la plus récente pour chaque enregistrement (sous-requêtes corrélées)
- le service le plus récent d'un véhicule par date (obtenu à partir du tableau de réparation) (tout ce qui est pas « Aucun » de serviceType signifie qu'il est un service)
- et le dernier compteur de véhicule par date (obtenue à partir du tableau de ravitaillement de véhicules)
Dans un seul enregistrement tout en ayant un ID de véhicule pour chaque enregistrement. Les données sont obtenues à partir de 2 tables différentes en les regroupant par ID de véhicule dans des sous-requêtes.
SELECT
r.vehicleCounter AS lastServiceCounter,
vf.vehicleCounter AS currentCounter,
r.dateFinished,
r.type,
v.vehicleID
FROM vehicle AS v
LEFT JOIN (
SELECT r.repairID,
r.vehicleCounter,
r.dateFinished,
st.type,
r.vehicleID
FROM repair AS r
INNER JOIN servicetype AS st
ON st.serviceTypeID = r.serviceTypeID
WHERE st.type <> 'None'
AND r.dateFinished IN (
SELECT MAX(dateFinished)
FROM repair
GROUP BY vehicleID
)
) AS r
ON r.vehicleID = v.vehicleID
LEFT JOIN (
SELECT vehicleCounter, vehicleID
FROM vehiclefueling
WHERE date IN(
SELECT MAX(date)
FROM vehicleFueling
GROUP BY vehicleID
)
) AS vf ON vf.vehicleID = v.vehicleID
Pendant l'exécution de cette requête, je devrais avoir seulement un dossier pour chaque ID, mais au moment de la requête renvoie le même ID avec des valeurs différentes pour un enregistrement (check ID 11):
Je pourrais utiliser GROUP BY VehicleID pour la requête principale, mais je veux garder la valeur la plus récente
comment joindriez-vous les tables sans dupliquer les enregistrements? – Joseph118
Je ne comprends pas votre commentaire. Cette version utilise une sous-requête corrélée pour renvoyer les enregistrements de réparation et de ravitaillement les plus récents. –
Votre approche est en quelque sorte ce dont j'ai besoin mais pas ce que j'espérais. Je peux toujours saisir les identifiants et faire une autre requête, mais je veux y parvenir en une fois. disons de la table de réparation je ne veux pas seulement l'ID, je veux l'ID et le lastServiceCounter. Je pourrais toujours faire une autre sous-requête dans l'instruction select mais cela ne ralentirait-il pas le processus puisqu'elle doit faire plusieurs instructions select pour chaque enregistrement? – Joseph118