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 :

Aide pour une requête compliquée


Sujet :

Langage SQL

  1. #1
    Membre régulier Avatar de miniil
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 267
    Points : 76
    Points
    76
    Par défaut Aide pour une requête compliquée
    Bonjour,

    Je ne sais pas trop quoi chercher comme type de requête, donc je vous expose directement mon cas.

    Voici la structure de ma base de donnée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Date          in     out     col1     col2
     
    01012013   1      0        10       15
    01022013   1      1        5         5
    01032013   0      1        10       10
     
    01012014   1      1        15       15
    27022014   1      0        70       70
    Il me faudrait comme résultat la somme des in et out par trimestre et année, et la dernière valeur par trimestre pour col1 et col2

    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Trimestre     Annee    SumIn      SumOut   Col1    Col2
    1                2013     2             2            10      10
    1                2014     2             1            70      70
    Est-ce possible de faire cela en une seule requête?

    D'avance merci de votre aide.
    miniil

  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
    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,

    Et également : quelle est la structure de votre table (notamment le type de la colonne date) ?

  4. #4
    Membre régulier Avatar de miniil
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 267
    Points : 76
    Points
    76
    Par défaut
    Bonjour,

    SGBD : MsSql

    Type des colonnes : Date pour la date et int pour les autres

    Merci
    miniil

  5. #5
    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
    il va falloir passer par 2 requete distinct :
    - calcul de la sommes de vos valeurs par couple année / trimestre (regardez du côté du group by et des fonctions date de mysql)
    - recherche des derniers enregistrements par trimestre :
    ......... re-sortir la date max pour chaque couple année / trimestre (group by + max)
    ......... faire une jointure de cette sous-requete avec la table principale sur la date afin de sélectionner les valeurs associées.

    Une fois les deux requêtes écrite il ne manquera plus que de faire une jointure entre elle sur le coupl année / trimestre.

    Revenez avec vos essai si vous n'y arrivez pas.

  6. #6
    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,

    Vous pouvez faire comme ceci :

    Code SQL : 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
     
    ;WITH CTE AS (
        SELECT 
            MONTH(ColonneDate) / 4 + 1 AS Trimestre,
            YEAR(ColonneDate) AS Annee,
            SUM(ColonneIn) OVER(PARTITION BY YEAR(ColonneDate) , MONTH(ColonneDate) / 4 + 1 ) AS SommeIn,
            SUM(ColonneOut) OVER(PARTITION BY YEAR(ColonneDate) , MONTH(ColonneDate) / 4 + 1 ) AS SommeOut,
            Col1,
            Col2,
            ROW_NUMBER() OVER (PARTITION BY YEAR(ColonneDate) , MONTH(ColonneDate) / 4 + 1 ORDER BY ColonneDate DESC) AS Rn
        FROM LaTable
    )
    SELECT 
        Trimestre,
        Annee,
        SommeIn,
        SommeOut,
        Col1,
        Col2
    FROM CTE
    WHERE Rn = 1

  7. #7
    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
    avec MySql ?

    (sinon avec des fonction analytique j'aurai regardé du côté des max() keep(...))

    edit: Ah oui tien !

  8. #8
    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
    Citation Envoyé par punkoff Voir le message
    avec MySql ?
    Non, avec SQL Server :

    Citation Envoyé par miniil Voir le message
    SGBD : MsSql

Discussions similaires

  1. Aide pour une requête compliquée
    Par DiPSoMaNiE dans le forum Langage SQL
    Réponses: 8
    Dernier message: 24/05/2011, 15h31
  2. Besoin d'aide pour une requète compliquée
    Par Tonii dans le forum SQL
    Réponses: 13
    Dernier message: 27/11/2009, 14h41
  3. Besoin d'aide pour une requête compliquée
    Par Chekov dans le forum Langage SQL
    Réponses: 2
    Dernier message: 24/01/2008, 10h59
  4. Réponses: 2
    Dernier message: 12/09/2007, 21h47
  5. besoin d'aide pour une requête
    Par Damien69 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/03/2004, 15h38

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