IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Somme de différents maximum


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 28
    Points : 6
    Points
    6
    Par défaut Somme de différents maximum
    Je suis désolé si mon intitulé parait peu parlant mais j'ai vraiment besoin d'aide pour une requête sur laquelle je bloque, je vous explique.

    Je dispose de cette table :
    Nom : Donnees.png
Affichages : 175
Taille : 153,5 Ko

    Dans cette table sont stockées des réservations de trajets, j'aimerais calculé la distance kilométrique effectué par an, mais ce n'est pas si simple car pour commencer je ne dois pas avoir plusieurs fois la même réservation apparaître mais également si l'on part d'un même arrêt se situant dans la même ville à la même heure cela signifie qu'on ne doit pas prendre cette distance en compte également, et pour l'arrivé il en est de même, j'aimerais savoir comment m'y prendre j'ai fais plusieurs essaies sans arrivée à une façon optimal de calculé cette distance kilométrique par année.

    Si quelqu'un aurait des idées ou bien des codes à adapter à ma situation ça serait sympa, merci d'avance !

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 241
    Points : 19 367
    Points
    19 367
    Billets dans le blog
    61
    Par défaut
    Bonjour,

    Dans cette table sont stockées des réservations de trajets, j'aimerais calculé la distance kilométrique effectué par an, mais ce n'est pas si simple car pour commencer je ne dois pas avoir plusieurs fois la même réservation apparaître
    Quel champ vous permet d'identifier la réservation ?

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    Pour le moment j'ai une solution mais elle est séparé en 2 codes, j'aimerais les rassembler mais je ne sais pas comment, voici les codes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT A.Jour, A.HoraireArr, A.CommuneArr, A.ArretArr, A.Distance
    FROM Donnees AS A INNER JOIN (SELECT Jour, HoraireArr, CommuneArr, ArretArr, Max(Distance) AS DistanceMax FROM Donnees AS C GROUP BY C.Jour, C.HoraireArr, C.CommuneArr, C.ArretArr)  AS B ON (A.Jour = B.Jour) AND (A.HoraireArr = B.HoraireArr) AND (A.CommuneArr = B.CommuneArr) AND (A.ArretArr = B.ArretArr) AND (A.Distance = B.DistanceMax)
    WHERE A.Suspendu = 0
    GROUP BY A.Jour, A.HoraireArr, A.CommuneArr, A.ArretArr, A.Distance
    ORDER BY A.Jour, A.HoraireArr;

    Et celui ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT A.Jour, A.HoraireDep, A.CommuneDep, A.ArretDep, A.Distance
    FROM Donnees AS A INNER JOIN (SELECT Jour, HoraireDep, CommuneDep, ArretDep, Max(Distance) AS DistanceMax FROM Donnees AS C GROUP BY C.Jour, C.HoraireDep, C.CommuneDep, C.ArretDep)  AS B ON (A.Jour = B.Jour) AND (A.HoraireDep = B.HoraireDep) AND (A.CommuneDep = B.CommuneDep) AND (A.ArretDep = B.ArretDep) AND (A.Distance = B.DistanceMax)
    WHERE A.Suspendu = 0
    GROUP BY A.Jour, A.HoraireDep, A.CommuneDep, A.ArretDep, A.Distance
    ORDER BY A.Jour, A.HoraireDep;

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 241
    Points : 19 367
    Points
    19 367
    Billets dans le blog
    61
    Par défaut
    Pourquoi utiliser une liaison supplémentaire, ceci ne suffirait pas :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Jour, HoraireArr, CommuneArr, ArretArr, Max(Distance) AS DistanceMax
    FROM Donnees
    WHERE A.Suspendu = 0
    GROUP BY Jour, HoraireArr, CommuneArr, ArretArr
    ORDER BY Jour, HoraireArr;

    Ou encore :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Jour, HoraireDep, CommuneDep, ArretDep, Max(Distance) AS DistanceMax
    FROM Donnees
    WHERE A.Suspendu = 0
    GROUP BY Jour, HoraireDep, CommuneDep, ArretDep
    ORDER BY Jour, HoraireDep;

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    Non car en utilisant un exemple simple :

    HoraireDep CommuneDep ArretDep HoraireArr CommuneArr ArretArrr Distance
    1 7:30 FORBACH GARE 7:45 ETZLING EGLISE 10.7
    2 7:30 FORBACH GARE 7:35 ETZLING EGLISE 8.5
    3 7:30 FORBACH GARE 7:40 ETZLING EGLISE 9.6

    Ma première requête va donc rechercher le maximum parmi ces 3 enregistrement qui sont inclus donc dans le même voyage puisqu'ils ont tous les 3 le même horaire de départ, la même commune et arrêt d'arriver.
    Donc cela ne suffit pas je pense, de même pour ma deuxième requête qui est la même en inversant les départ et les arrivés, vous comprenez ?

  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 241
    Points : 19 367
    Points
    19 367
    Billets dans le blog
    61
    Par défaut
    Il faut d'abord repérer la liste des champs identifiants un trajet/réservation. Ces champs ne varient pas pour un même trajet.
    Ensuite, suivant votre logique déterminer la distance maximum en faisant des regroupements sur ces champs et un max sur le champ distance.
    Puis faire la somme de ces maximums.

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    Le soucis ici c'est que pour définir un trajet j'ai deux cas différents à prendre en compte, donc en quelques sortes il faudrait faire 2 GROUP BY différents mais cela n'est pas possible, pour un trajet un horaire une commune et un arrêt de départ définissent un trajet la dernière desserte (max(distance)) de ce trajet est donc la valeur que j'extrait à l'aide de cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT A.Jour, A.HoraireArr, A.CommuneArr, A.ArretArr, A.Distance
    FROM Donnees AS A INNER JOIN (
    SELECT Jour, HoraireArr, CommuneArr, ArretArr, Max(Distance) AS DistanceMax 
    FROM Donnees AS C GROUP BY C.Jour, C.HoraireArr, C.CommuneArr, C.ArretArr)  AS B 
    ON (A.Jour = B.Jour) 
    AND (A.HoraireArr = B.HoraireArr) 
    AND (A.CommuneArr = B.CommuneArr) 
    AND (A.ArretArr = B.ArretArr) 
    AND (A.Distance = B.DistanceMax)
    WHERE A.Suspendu = 0
    GROUP BY A.Jour, A.HoraireArr, A.CommuneArr, A.ArretArr, A.Distance
    ORDER BY A.Jour, A.HoraireArr;
    Et de même pour les départ, mes résultats sont cohérents mais il faudrait que j'arrive à combiner en quelques sortes cette requête à la même requête pour les départ que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT A.Jour, A.HoraireDep, A.CommuneDep, A.ArretDep, A.Distance
    FROM Donnees AS A INNER JOIN (
    SELECT Jour, HoraireDep, CommuneDep, ArretDep, Max(Distance) As DistanceMax 
    FROM Donnees As C
    GROUP BY C.Jour, C.HoraireDep, C.CommuneDep, C.ArretDep) As B 
    ON  A.Jour = B.Jour 
    AND A.HoraireDep = B.HoraireDep 
    AND A.CommuneDep = B.CommuneDep 
    AND A.ArretDep = B.ArretDep 
    AND A.Distance = B.DistanceMax
    WHERE A.Suspendu = 0
    GROUP BY A.Jour, A.HoraireDep, A.CommuneDep, A.ArretDep, A.Distance
    ORDER BY A.Jour, A.HoraireDep
    Serait-il possible de réaliser cela ?

Discussions similaires

  1. Calculer une somme sans le Maximum
    Par Amaury_35 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/08/2009, 15h08
  2. Faire une somme de différents caractères
    Par Homer091 dans le forum Excel
    Réponses: 6
    Dernier message: 11/03/2009, 11h38
  3. [A-07] Plusieurs sommes dans différents champs
    Par alex77140 dans le forum IHM
    Réponses: 4
    Dernier message: 26/02/2009, 15h28
  4. Somme de différentes valeurs
    Par PtitGénie dans le forum Langage SQL
    Réponses: 2
    Dernier message: 16/09/2008, 10h35
  5. [Trigger] Somme de différentes lignes
    Par outlawz dans le forum Oracle
    Réponses: 5
    Dernier message: 08/09/2006, 17h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo