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

SQL Oracle Discussion :

Somme de nombre pour une date maximum


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 58
    Par défaut Somme de nombre pour une date maximum
    Bonjour à tous,
    je suis débutant en SQL et je bloque sur le problème suivant pour lequel je n'ai pas trouvé de solutions sur google...
    J'ai une table de données avec 3 champs "date", "code" et "nombre"
    Pour une date donnée, j'ai plusieurs fois "code" qui apparaît avec différentes valeurs de "nombre"
    Je souhaite extraire la somme de "nombre", pour la date la plus récente, et pour chaque code.
    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	SELECT
    			MAX(Date), 
    			Code,
    			SUM(nombre) 
    		FROM 
    			TABLE
    		GROUP BY
    			DateInventaire,    
    			CodeIsinPortefeuille
    Si je fais cela j'obtiens toutes les dates...
    et la version :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	SELECT
    			MAX(Date), 
    			Code,
    			SUM(nombre) 
    		FROM 
    			TABLE
    		GROUP BY 
    			CodeIsinPortefeuille
    A ce moment j'ai la somme de nombre sur TOUTES les dates et pas seulement sur la plus récente...

    merci pour votre aide !

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    méthode simple : rajoute une condition where sur la date
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Where date = (select max(date) from tatable)

  3. #3
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 58
    Par défaut
    Merci pour cette réponse !
    Est ce que cela va marcher si la date max n'est pas la mal pour tous les codes?
    Edit : j'ai oublié de préciser que j'avais, de plus, une date_MAX à ne pas dépasser...IL faut donc quelque chose du genre max(date) where date <= date_max...

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Peux-tu donner toutes les règles ?

    j'avais cru comprendre que c'était tous les codes d'une date max.
    Peux tu donner un exemple de données et le résultat ?

  5. #5
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 58
    Par défaut
    Désolé je ne suis pas clair !

    Par exemple les données sont :
    date            code    nombre
    31/12/2011   AAA        5
    31/10/2010   AAA        1
    31/12/2011   AAA        3
    31/10/2010   AAA        4.5
    31/12/2011   BBB         5
    05/09/2011   BBB         2
    05/09/2011   BBB         8.5
    31/12/2011   BBB         4
    31/12/2012   AAA        5
    31/10/2012   AAA        1
    31/12/2012   AAA        3
    Et je souhaiterais avoir la somme de "nombre" pour chaque code pour la date maximale inférieure à une date_max
    ex. : si date_max=31/12/2011
    j'aimerais qu'il me sorte
    31/12/2011   AAA        8
    31/12/2011   BBB         9

  6. #6
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Pas de soucis..

    Code : 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
    WITH t AS (SELECT TO_DATE('31/12/2011', 'DD/MM/YYYY') dateinv, 'AAA' code, 5   nombre FROM dual
    UNION ALL SELECT TO_DATE('31/10/2010', 'DD/MM/YYYY') dateinv, 'AAA' code, 1   nombre FROM dual
    UNION ALL SELECT TO_DATE('31/12/2011', 'DD/MM/YYYY') dateinv, 'AAA' code, 3   nombre FROM dual
    UNION ALL SELECT TO_DATE('31/10/2010', 'DD/MM/YYYY') dateinv, 'AAA' code, 4.5 nombre FROM dual
    UNION ALL SELECT TO_DATE('31/12/2011', 'DD/MM/YYYY') dateinv, 'BBB' code, 5   nombre FROM dual
    UNION ALL SELECT TO_DATE('05/09/2011', 'DD/MM/YYYY') dateinv, 'BBB' code, 2   nombre FROM dual
    UNION ALL SELECT TO_DATE('05/09/2011', 'DD/MM/YYYY') dateinv, 'BBB' code, 8.5 nombre FROM dual
    UNION ALL SELECT TO_DATE('31/12/2011', 'DD/MM/YYYY') dateinv, 'BBB' code, 4   nombre FROM dual
    UNION ALL SELECT TO_DATE('31/12/2012', 'DD/MM/YYYY') dateinv, 'AAA' code, 5   nombre FROM dual
    UNION ALL SELECT TO_DATE('31/10/2012', 'DD/MM/YYYY') dateinv, 'AAA' code, 1   nombre FROM dual
    UNION ALL SELECT TO_DATE('31/12/2012', 'DD/MM/YYYY') dateinv, 'AAA' code, 3   nombre FROM dual)
    SELECT dateinv, code, SUM(nombre)
    FROM t
    WHERE dateinv = (SELECT MAX(dateinv) FROM t WHERE dateinv <= TO_DATE('31.12.2011', 'DD.MM.YYYY'))
    GROUP BY dateinv, code
     
    DATEINV	CODE	SUM(NOMBRE)
    31/12/2011	AAA	8
    31/12/2011	BBB	9
    Tu ne restreins bien que par la date_max ? C'est à dire que si tu as le code CCC qui n'existe qu'au 30/11/2011, tu ne l'affiches pas.

    Tu as dit ceci :
    Est ce que cela va marcher si la date max n'est pas la mal pour tous les codes?
    Dans ce cas la réponse est non.
    S'il faut le gérer, c'est comme ceci
    Code : 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
    22
    WITH t AS (SELECT TO_DATE('31/12/2011', 'DD/MM/YYYY') dateinv, 'AAA' code, 5   nombre FROM dual
    UNION ALL SELECT TO_DATE('31/10/2010', 'DD/MM/YYYY') dateinv, 'AAA' code, 1   nombre FROM dual
    UNION ALL SELECT TO_DATE('31/12/2011', 'DD/MM/YYYY') dateinv, 'AAA' code, 3   nombre FROM dual
    UNION ALL SELECT TO_DATE('31/10/2010', 'DD/MM/YYYY') dateinv, 'AAA' code, 4.5 nombre FROM dual
    UNION ALL SELECT TO_DATE('31/12/2011', 'DD/MM/YYYY') dateinv, 'BBB' code, 5   nombre FROM dual
    UNION ALL SELECT TO_DATE('05/09/2011', 'DD/MM/YYYY') dateinv, 'BBB' code, 2   nombre FROM dual
    UNION ALL SELECT TO_DATE('05/09/2011', 'DD/MM/YYYY') dateinv, 'BBB' code, 8.5 nombre FROM dual
    UNION ALL SELECT TO_DATE('31/12/2011', 'DD/MM/YYYY') dateinv, 'BBB' code, 4   nombre FROM dual
    UNION ALL SELECT TO_DATE('31/12/2012', 'DD/MM/YYYY') dateinv, 'AAA' code, 5   nombre FROM dual
    UNION ALL SELECT TO_DATE('31/10/2012', 'DD/MM/YYYY') dateinv, 'AAA' code, 1   nombre FROM dual
    UNION ALL SELECT TO_DATE('31/12/2012', 'DD/MM/YYYY') dateinv, 'AAA' code, 3   nombre FROM dual
    UNION ALL SELECT TO_DATE('30/11/2011', 'DD/MM/YYYY') dateinv, 'CCC' code, 3   nombre FROM dual)
    SELECT dateinv, code, SUM(nombre)
    FROM t a
    WHERE dateinv = (SELECT MAX(dateinv) FROM t b WHERE b.code = a.code AND b.dateinv <= TO_DATE('31.12.2011', 'DD.MM.YYYY'))
    GROUP BY dateinv, code
     
     
    DATEINV	CODE	SUM(NOMBRE)
    30/11/2011	CCC	3
    31/12/2011	AAA	8
    31/12/2011	BBB	9

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Compter le nombre d'article différent pour une date X
    Par Raphael1980 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/02/2012, 10h32
  2. Aide pour une ramener une info en fonction d'une date maximum
    Par dessinateurttuyen dans le forum SQL
    Réponses: 7
    Dernier message: 31/10/2008, 16h52
  3. Somme (kgs) pour une date donnée
    Par Zilfi63 dans le forum IHM
    Réponses: 4
    Dernier message: 05/06/2007, 16h56
  4. [VB.NET] Valur null pour une date.
    Par Lois dans le forum Windows Forms
    Réponses: 2
    Dernier message: 20/12/2004, 14h38
  5. Création requete besoin d'aide pour une date
    Par royrremi dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/07/2004, 22h03

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