Bonjour,
J'ai une table "Entretiens"
vehicule date_entretien kilometrage v1 2022-01-01 3000 v1 2022-01-15 4000 v1 2022-07-25 11000 v2 2022-03-05 350 v2 2022-04-06 1500 v2 2022-08-06 3200
Dans le résultat de ma requête je souhaite avoir la différence de kilomètres avec l'entretien précédent de ce même véhicule. En gros :
vehicule date_entretien delta_kilometrage v1 2022-01-01 v1 2022-01-15 1000 v1 2022-07-25 7000 v2 2022-03-05 v2 2022-04-06 1150 v2 2022-08-06 1700
J'ai rédigé ma requête de la sorte :
Si je mets "RNK" à 1 je n'ai aucun calcul de delta :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 SELECT ENT.VEHICULE, ENT.DATE_ENTRETIEN, (ENT.KMS - ENT3.KMS) AS DELTA_KILOMETRAGE FROM ENTRETIENS AS ENT LEFT JOIN ( SELECT ENT2.VEHICLE, ENT2.DATE_ENTRETIEN, ENT2.KMS RANK() OVER (PARTITION BY ENT2.VEHICULE ORDER BY ENT2.DATE_ENTRETIEN DESC) AS RNK FROM ENTRETIENS AS ENT2 ) ENT3 ON ENT.VEHICULE = ENT3.VEHICULE AND RNK = 1 AND ENT3.DATE_ENTRETIEN < ENT.DATE_ENTRETIEN ORDER BY ENT.VEHICULE, ENT.DATE_ENTRETIEN
vehicule date_entretien delta_kilometrage v1 2022-01-01 v1 2022-01-15 v1 2022-07-25 v2 2022-03-05 v2 2022-04-06 v2 2022-08-06
Si je mets "RNK" à 2 j'ai bien le résultat pour le dernier résultat mais rien pour les entretiens précédents :
vehicule date_entretien delta_kilometrage v1 2022-01-01 v1 2022-01-15 v1 2022-07-25 7000 v2 2022-03-05 v2 2022-04-06 v2 2022-08-06 1700
Je dois passer à côté de quelque chose, je suis preneur si quelqu'un voit ma boulette
Partager