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 :

Conception requête complexe


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Points : 100
    Points
    100
    Par défaut Conception requête complexe
    Bonjour,

    J'ai une table commande et une table commande_historique.
    Lors de la création de ma commande, j'insère un enregistrement dans ma table commande_historique.
    Je fait de même à chaque fois que je change l'état de ma commande.
    J'obtiens ainsi :

    Table Commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ID    |Etat      |User    |Prix
    1     |Validé    |Admin   |50
    Table Commande_historique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ID    |ID_COMMANDE   |User      |Etat      |Date
    1     |1             |Client    |Créé      |2012-01-01 19:50:25
    2     |1             |Admin     |Accepté   |2012-01-02 07:45:17
    3     |1             |Client    |Modifié   |2012-01-02 10:37:01
    4     |1             |Admin     |Accepté   |2012-01-02 14:28:13
    5     |1             |Admin     |Validé    |2012-01-03 08:01:52
    Avec ces informations je voudrais pouvoir en une requête produire le résultat suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ID_COMMANDE  |Etat      |Durée
    1            |Créé      |0jour 11 heures 54 minutes 52 secondes
    1            |Accepté   |0jour 02 heures 51 minutes 44 secondes
    1            |Modifié   |0jour 03 heures 51 minutes 12 secondes
    1            |Accepté   |0jour 17 heures 33 minutes 39 secondes
    Les calculs correspondent au temps écoulés entre deux dates ici toujours moins de 1 jour, mais çà peut parfois être plus.
    Si quelqu'un à une solution j'suis preneur.
    J'avoue que je me fais des noeuds au cerveau en essayant de résoudre ce cas.

    D'avance merci de vos réponses.
    HadanMarv

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    quel est votre sgbd ?

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Points : 100
    Points
    100
    Par défaut
    Bonjour,

    Autant pour moi, j'ai omis de mentionner que j'utilise PostgreSql en version 9.

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    oki bon point,

    tournez vous du côté des fonctions de fenetrages en particulier lead, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    with tmp as (
    select id_commande, Etat, Date as cur_date,
    lead(Date) over(partition by id_commande over Date) as next_date,
    lead(Date) over(partition by id_commande over Date) - Date as diff
    from Commande_historique)
     
    select * from tmp
    Je vous laisse cherchez pour le formatage.

    Par contre évitez d'appeler une colonne avec un nom réservé vosu pourriez avoir de mauvaise surprise .. (colonne nommée Date en particulier).

    A lire : http://www.postgresql.org/docs/9.1/s...al-window.html
    http://www.postgresql.org/docs/9.1/s...ns-window.html

Discussions similaires

  1. [MySQL] Conception de deux requêtes complexes
    Par Vesta dans le forum Langage SQL
    Réponses: 20
    Dernier message: 24/07/2007, 17h53
  2. Requête complexe
    Par Yali dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/01/2005, 09h19
  3. 3 tables avec requête complexe
    Par yamino dans le forum Langage SQL
    Réponses: 6
    Dernier message: 25/03/2004, 19h50
  4. Encore une requête complexe sur plusieurs tables
    Par DenPro dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/12/2003, 19h05
  5. Requête complexe sur plusieurs table
    Par DenPro dans le forum Langage SQL
    Réponses: 13
    Dernier message: 25/11/2003, 17h50

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