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

Langage SQL Discussion :

Requête de regroupement complexe


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Requête de regroupement complexe
    Bonjour,

    J'ai une table qui contient des enregistrements de commandes ayant comme en-tête :
    id commande, date d'enregistrement, date de fin

    L'objectif est de réaliser une requête qui pour chaque date, compte le nombre de commandes enregistrées et le nombre de commandes traités.

    Exemple :

    Table source :

    ID START DATE END DATE
    1 18/06/2019 19/06/2019
    2 18/06/2019 20/06/2019
    3 19/06/2019 20/06/2019

    Table cible :

    DATE N COMMANDE ENREG N COMMANDE TRAIT
    18/06/2019 2 0
    19/06/2019 1 1
    20/06/2019 0 2

    Bonus :
    Je ne sais pas si c'est faisable mais l'idéal serait d'avoir aussi une dernière colonne qui comprend le nombre de commandes en attente, c'est-à-dire une colonne qui calcule le nombre de commandes en attente de la veille additionné au nombre de commandes enregistrées et diminué du nombre de commandes traitées.


    Cela fait maintenant quelques jours que j'essaie de faire tout ça en une seule requête sql mais en vain. Est-ce que vous pouvez m'aider ?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 188
    Points : 12 744
    Points
    12 744
    Par défaut
    Bonjour,
    Pour ma part je partirai d'une table calendrier, avec 2 jointures sur la table commande:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select calendrier.coldate,count(distinct c1.id) as end,count(distinct c2.id) as trait
    from calendrier
    left outer join commande as c1 on c1.startdate= calendrier.coldate
    left outer join commande as c2 on c2.enddate = calendrier.coldate
    group by calendrier.coldate

    Pour la question subsidiaire, il "suffit" d'ajouter une autre jointure sur la table commande, en jouant sur la date pour trouver celles de la veille. ensuite ce ne sont que des mathématiques !
    Tatayo.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci pour tes réponses, sur la question subsidiaire je crois que je n'étais pas très clair.. ou bien je n'ai pas compris ta réponse hahah

    Le but serait de calculer le nombre de commandes qui étaient en attente à la fin de chaque jour, donc en quelque sorte le nombre de commandes ayant une date d'enregistrement et n'ayant pas de date de traitement.

    Une requête pour cela ? Merci !

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 387
    Points
    38 387
    Billets dans le blog
    9
    Par défaut
    Comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        select startdate
             , count(*)
        from ma_table
        where enddate = '9999-12-31'
        group by startdate
    Selon la façon de gérér la date de fin non échue, il faut éventuellement remplacer where enddate = '9999-12-31' par where enddate is null.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Ce code permet d'avoir le nombre de commandes passées et non traités par jour d'arrivée de la commande, ce qui ne répond pas vraiment à ma question.
    Pour moi l'objectif est d'avoir, pour chaque jour, le nombre de commandes qui sont en attente, c'est le cumul de toutes les commandes qui ont été passées et non traités.
    J'espère que c'est un peu plus clair.
    Mercii !!

  6. #6
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 729
    Points : 1 414
    Points
    1 414
    Par défaut
    Bonjour,

    comment repérer les commandes en souffrance ?
    1- elles n'ont pas de startdate (null ou valeur par défaut)
    2- elles ont une startdate mais pas de endate (null ou valeur par défaut)
    3- elles ne sont pas renseignées dans la table "source" (celle que tatayo a nommé "commande")

    Pour faciliter les réponses, merci de fournir les noms des objets, leur définition voire quelques lignes remarquables (en relation avec la demande).
    Le savoir est une nourriture qui exige des efforts.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Les commandes en attente ont une startDate et n'ont pas de endDate.

    Pour info, une ligne dans la table source correspond à une commande avec un identifiant, un startDate, un endDate et d'autres variables qui ne concernent pas cette demande.

    L'objectif final serait d'avoir une table qui me permettrait de construire un chart de ce type :

    Nom : aaaa.png
Affichages : 176
Taille : 9,1 Ko

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 188
    Points : 12 744
    Points
    12 744
    Par défaut
    Dans ce cas tu peux ajouter une jointure dans la requête que je t'ai donné, avec comme critère la date de début comme c1, mais dont la date de fin est null. Et il faut aussi modifier la jointure de c1 pour écarter les commandes dont la date de fin est renseignée (not null).
    Enfin si j'ai bien compris

    Après si tu veux par exemple les commandes de la veille, regarde du côté des fonctions de gestion des dates du SGBD (non spécifié) pour à partir de la ligne de calendrier avoir les commandes de la veille.

    Tatayo.

  9. #9
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 729
    Points : 1 414
    Points
    1 414
    Par défaut
    Bonsoir,

    Effectivement savoir le SGBD et sa version permettrait de savoir si on peut utiliser les fonctions de fenêtrage.

    Pour ma part je comprend la demande du nombre des commandes "en attente" comme étant le résultat d'un solde glissant (in-out à date).
    Le savoir est une nourriture qui exige des efforts.

  10. #10
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    bonjour,

    êtes-vous certains de votre résultat attendu ?

    Pourquoi seulement 1 et non pas 2 pour les commande enregistrées du 19 ? (il y a pourtant celle du 18 et celle du 19 en cours)

Discussions similaires

  1. [Requête][97] Regroupment du champs Date
    Par majnoune dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 17/04/2007, 16h32
  2. Création d'une requête un peu complexe
    Par vpicchi dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 17/01/2007, 22h52
  3. requête de regroupement
    Par bouba_95 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 08/01/2007, 11h30
  4. [MySQL] Problème de requête de regroupement
    Par zoom61 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/08/2006, 15h43
  5. Requête sql regroupement de dates
    Par rocs dans le forum Langage SQL
    Réponses: 1
    Dernier message: 28/07/2005, 17h40

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