PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Réécrire la requete
Réécrire la requete
Iniciado por Ralph IGCI, 05,jun. 2020 21:40 - 10 respuestas
Miembro registrado
558 mensajes
Publicado el 05,junio 2020 - 21:40
Bonsoir,
J'ai cette requête à écrire en sql.
SELECT
LIGNSORT.KMACTUEL AS KMACTUEL_LIGNE,
LIGNSORT.KMPROCHAIN AS KMPROCHAIN,
VEHICULE.CODEENCOURS AS CODEENCOURS,
VEHICULE.KMACTUEL AS KMACTUEL_VEHICULE,
LIGNSORT.PJCLEUNIK AS PJCLEUNIK ,
SORTIE.DATESORTIE AS DATESORTIE
FROM
SORTIE,
LIGNSORT,
PIECEDET,
VEHICULE,
TypeEquipement
WHERE
TypeEquipement.IDTypeEquipement = VEHICULE.IDTypeEquipement
AND VEHICULE.VECLEUNIK = LIGNSORT.VECLEUNIK
AND PIECEDET.PJCLEUNIK = LIGNSORT.PJCLEUNIK
AND SORTIE.SRCLEUNIK = LIGNSORT.SRCLEUNIK


Elle fonctionne très bien, Je dois récupérer , traiter et ne prendre pour chaque LIGNSORT, je veux seulement la dernière ligne par rapport à la DATESORTIE. , même si un véhicule à 5 ligne, je ne veux que la dernière par rapport à la date de LIGNESORT.


Merci de m'aider à la changer.
Miembro registrado
4.362 mensajes
Publicado el 06,junio 2020 - 00:59
Bonjour,
Il suffit d'ajouter une condition sur la colonne voulue.
Par exemple
.....
AND SORTIE.DATESORTIE={pDateSortie}

Il suffit, avant l'éxécution de la requête de passer la valeur du paramètre désiré comme expliqué dans la doc.

Dans ton cas, c'est un peu différent, à priori tu veux la dernière date de sortie, dont la date MAX.
Il faut dans ce cas utiliser la fonction SQL MAX

--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
2.682 mensajes
Publicado el 06,junio 2020 - 09:45
Bonjour,

Il n'y a pas de condition à rajouter, il suffit de trier la requête par date de sortie en décroissant et de récupérer la premiere ligne ou de faire un top 1 ou LIMIT 1 selon le SGBD
SELECT
TOP 1
LIGNSORT.KMACTUEL AS KMACTUEL_LIGNE,
LIGNSORT.KMPROCHAIN AS KMPROCHAIN,
VEHICULE.CODEENCOURS AS CODEENCOURS,
VEHICULE.KMACTUEL AS KMACTUEL_VEHICULE,
LIGNSORT.PJCLEUNIK AS PJCLEUNIK ,
SORTIE.DATESORTIE AS DATESORTIE
FROM
SORTIE,
LIGNSORT,
PIECEDET,
VEHICULE,
TypeEquipement
WHERE
TypeEquipement.IDTypeEquipement = VEHICULE.IDTypeEquipement
AND VEHICULE.VECLEUNIK = LIGNSORT.VECLEUNIK
AND PIECEDET.PJCLEUNIK = LIGNSORT.PJCLEUNIK
AND SORTIE.SRCLEUNIK = LIGNSORT.SRCLEUNIK
ORDER BY DATESORTIE DESC


--
Cordialement,

Philippe SAINT-BERTIN
Miembro registrado
558 mensajes
Publicado el 06,junio 2020 - 10:17
Bonjour,
Si vous faites cela vous aurez un enregistrement seulement,
Je ne veux pas fixer le VECLEUNIK, ni celui PJCLEUNIK
Mais pour chaque VECLEUNIK, et PJCLEUNIK, un seul enregistrement, le tout dernier
Merci
Miembro registrado
558 mensajes
Publicado el 06,junio 2020 - 10:27
Bonjour et Merci,
Ce que je veux faire, c'est éviter d'utiliser plusieurs requetes.
C'est à dire filtre le VEHICULE, puis chercher les derniers PJCLEUNIK
Merci
Miembro registrado
558 mensajes
Publicado el 06,junio 2020 - 11:03
Bonjour,
Avec cette requete
SELECT
LIGNSORT.KMACTUEL AS KMACTUEL_LIGNE,
LIGNSORT.KMPROCHAIN AS KMPROCHAIN,
VEHICULE.CODEENCOURS AS CODEENCOURS,
VEHICULE.KMACTUEL AS KMACTUEL_VEHICULE,
LIGNSORT.PJCLEUNIK AS PJCLEUNIK ,
SORTIE.DATESORTIE AS DATESORTIE
FROM
SORTIE,
LIGNSORT,
PIECEDET,
VEHICULE,
TypeEquipement
WHERE
TypeEquipement.IDTypeEquipement = VEHICULE.IDTypeEquipement
AND VEHICULE.VECLEUNIK = LIGNSORT.VECLEUNIK
AND PIECEDET.PJCLEUNIK = LIGNSORT.PJCLEUNIK
AND SORTIE.SRCLEUNIK = LIGNSORT.SRCLEUNIK



J'ai ceci
KMACTUEL_LIGNE KMPROCHAIN CODEENCOURS KMACTUEL_VEHICULE PJCLEUNIK DATESORTIE
0 0 COM041 10 165 2 019 000 000 349 04/05/2020
0 0 COM041 10 165 2 019 000 000 349 08/05/2020
0 0 EX042 4 890 2 019 000 000 349 04/05/2020
0 0 EX042 4 890 2 019 000 000 349 06/05/2020
0 0 EX042 4 890 2 019 000 000 349 08/05/2020
4 890 7 390 EX042 4 890 2 019 000 000 715 03/04/2020
0 0 EX042 4 890 2 019 000 001 654 15/04/2020
0 0 LV051 3 745 2 019 000 000 349 05/05/2020
0 0 LV051 3 745 2 019 000 000 349 08/05/2020
0 0 TR001 6 108 2 019 000 000 349 04/05/2020
0 0 TR001 6 108 2 019 000 000 349 06/05/2020
0 0 TR001 6 108 2 019 000 000 349 08/05/2020
0 0 TR003 9 451 2 019 000 000 349 04/05/2020
0 0 TR003 9 451 2 019 000 000 349 08/05/2020
0 0 TRACR21 2 435 2 019 000 000 349 06/05/2020
0 0 TRACR21 2 435 2 019 000 000 349 08/05/2020



ce que je veux , c'est ceci
KMACTUEL_LIGNE KMPROCHAIN CODEENCOURS KMACTUEL_VEHICULE PJCLEUNIK DATESORTIE
0 0 COM041 10 165 2 019 000 000 349 04/05/2020
0 0 EX042 4 890 2 019 000 000 349 08/05/2020
4 890 7 390 EX042 4 890 2 019 000 000 715 03/04/2020
0 0 EX042 4 890 2 019 000 001 654 15/04/2020
0 0 LV051 3 745 2 019 000 000 349 08/05/2020
0 0 TR001 6 108 2 019 000 000 349 08/05/2020
0 0 TR003 9 451 2 019 000 000 349 08/05/2020
0 0 TRACR21 2 435 2 019 000 000 349 08/05/2020

je crois que c'est plus précis maintenant.
Merci
Publicado el 08,junio 2020 - 09:39
Ralph IGCI a émis l'idée suivante :
Bonjour,
Avec cette requete
SELECT
LIGNSORT.KMACTUEL AS KMACTUEL_LIGNE,
LIGNSORT.KMPROCHAIN AS KMPROCHAIN,
VEHICULE.CODEENCOURS AS CODEENCOURS,
VEHICULE.KMACTUEL AS KMACTUEL_VEHICULE,
LIGNSORT.PJCLEUNIK AS PJCLEUNIK ,
SORTIE.DATESORTIE AS DATESORTIE
FROM
SORTIE,
LIGNSORT,
PIECEDET,
VEHICULE,
TypeEquipement
WHERE
TypeEquipement.IDTypeEquipement = VEHICULE.IDTypeEquipement
AND VEHICULE.VECLEUNIK = LIGNSORT.VECLEUNIK
AND PIECEDET.PJCLEUNIK = LIGNSORT.PJCLEUNIK
AND SORTIE.SRCLEUNIK = LIGNSORT.SRCLEUNIK



J'ai ceci
KMACTUEL_LIGNE KMPROCHAIN CODEENCOURS KMACTUEL_VEHICULE PJCLEUNIK DATESORTIE
0 0 COM041 10 165 2 019 000 000 349 04/05/2020
0 0 COM041 10 165 2 019 000 000 349 08/05/2020
0 0 EX042 4 890 2 019 000 000 349 04/05/2020
0 0 EX042 4 890 2 019 000 000 349 06/05/2020
0 0 EX042 4 890 2 019 000 000 349 08/05/2020
4 890 7 390 EX042 4 890 2 019 000 000 715 03/04/2020
0 0 EX042 4 890 2 019 000 001 654 15/04/2020
0 0 LV051 3 745 2 019 000 000 349 05/05/2020
0 0 LV051 3 745 2 019 000 000 349 08/05/2020
0 0 TR001 6 108 2 019 000 000 349 04/05/2020
0 0 TR001 6 108 2 019 000 000 349 06/05/2020
0 0 TR001 6 108 2 019 000 000 349 08/05/2020
0 0 TR003 9 451 2 019 000 000 349 04/05/2020
0 0 TR003 9 451 2 019 000 000 349 08/05/2020
0 0 TRACR21 2 435 2 019 000 000 349 06/05/2020
0 0 TRACR21 2 435 2 019 000 000 349 08/05/2020



ce que je veux , c'est ceci
KMACTUEL_LIGNE KMPROCHAIN CODEENCOURS KMACTUEL_VEHICULE PJCLEUNIK DATESORTIE
0 0 COM041 10 165 2 019 000 000 349 04/05/2020
0 0 EX042 4 890 2 019 000 000 349 08/05/2020
4 890 7 390 EX042 4 890 2 019 000 000 715 03/04/2020
0 0 EX042 4 890 2 019 000 001 654 15/04/2020
0 0 LV051 3 745 2 019 000 000 349 08/05/2020
0 0 TR001 6 108 2 019 000 000 349 08/05/2020
0 0 TR003 9 451 2 019 000 000 349 08/05/2020
0 0 TRACR21 2 435 2 019 000 000 349 08/05/2020

je crois que c'est plus précis maintenant.
Merci


bonjour,

le plus simple et le plus facile à comprendre est de procéder comme
suit

- faire une req qui sélectionne les enregs voulus et qui les tri dans
l'ordre voule
- faire une 2nd req dont la clause from prend pour valeur la req
précédente et grouper en fonction du besoin

exemple

select *
from(
SELECT
LIGNSORT.KMACTUEL AS KMACTUEL_LIGNE,
LIGNSORT.KMPROCHAIN AS KMPROCHAIN,
VEHICULE.CODEENCOURS AS CODEENCOURS,
VEHICULE.KMACTUEL AS KMACTUEL_VEHICULE,
LIGNSORT.PJCLEUNIK AS PJCLEUNIK ,
SORTIE.DATESORTIE AS DATESORTIE
FROM
SORTIE,
LIGNSORT,
PIECEDET,
VEHICULE,
TypeEquipement
WHERE
TypeEquipement.IDTypeEquipement = VEHICULE.IDTypeEquipement
AND VEHICULE.VECLEUNIK = LIGNSORT.VECLEUNIK
AND PIECEDET.PJCLEUNIK = LIGNSORT.PJCLEUNIK
AND SORTIE.SRCLEUNIK = LIGNSORT.SRCLEUNIK
order by
XXXX,XXXX,etc.
) as T
group by
T.XXXXX,T.XXXXX,T.etc.

--
Cordialement JeAn-PhI
Miembro registrado
2.682 mensajes
Publicado el 08,junio 2020 - 10:08
Bonjour,

Tout d'abord quel est le SGBD utilisé ?

--
Cordialement,

Philippe SAINT-BERTIN
Miembro registrado
558 mensajes
Publicado el 08,junio 2020 - 15:32
BOnsoir Philippe,
Je suis sous HYPREFILE CS
Publicado el 08,junio 2020 - 17:48
Bonjour,

avec max(SORTIE.DATESORTIE) et group by ?

Cordialement,
Miembro registrado
558 mensajes
Publicado el 09,junio 2020 - 09:19
Bonjour,
C'est comme si c'est ça, je mets le max de données.
Merci