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 Firebird Discussion :

Probleme sur requete avec jour manquant


Sujet :

SQL Firebird

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 291
    Points : 144
    Points
    144
    Par défaut Probleme sur requete avec jour manquant
    Bonjour,

    Voici ma requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select extract(day from date_heure) as jr,sum(PUISS_ACTIVE_PRODUITE) from DATA_10MIN where DATE_HEURE between '01/01/2010' and '02/01/2010' group by jr
    elle me liste pour chaque jour la somme de PUISS_ACTIVE_PRODUITE. Par contre j'aimerais que pour les jours où je n'ai pas de donnée le jour s'affiche avec marqué 0 dans la somme.
    Est ce que c'est possible à faire sans passer par une PS?

    Merci

  2. #2
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    Bonjour,

    Es-ce que les jours sont enregistrer même si il n' y a pas de donnée vous voulez dire ?

    Essayez avec COALESCE :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT extract(day FROM date_heure) AS jr,COALESCE(sum(PUISS_ACTIVE_PRODUITE) ,0) FROM DATA_10MIN WHERE DATE_HEURE BETWEEN '01/01/2010' AND '02/01/2010' GROUP BY jr

    Si il s'agit de cela, oui dans une vue :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE OR ALTER VIEW vw_Somme
    (JOUR,
     SOMME)
    AS
    SELECT extract(day FROM date_heure) AS jr,COALESCE(sum(PUISS_ACTIVE_PRODUITE) ,0) FROM DATA_10MIN WHERE DATE_HEURE BETWEEN '01/01/2010' AND '02/01/2010' GROUP BY jr
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 291
    Points : 144
    Points
    144
    Par défaut
    Bonjour,

    En fait le jour n'existe pas dans la table
    par exemple :

    DATE PUISS_ACTIVE_PRODUITE
    01/01/2010 10
    01/01/2010 10
    03/01/2010 20

    Je voudrais le résultat suivant :

    JR somme
    1 20
    2 0
    3 20

    Merci

  4. #4
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    Es-ce que ça peut regler le problème avec ce code ? :
    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
     
    CREATE OR ALTER VIEW V_TEST(
        S1,S2)
    AS
     
    with recursive plage_date as
    (
      select cast('01-01-2010' as date) as jour, 0  as somme from rdb$database
      union all
      select dateadd(day, 1, jour),somme+0 from plage_date
      where jour BETWEEN CAST('01/01/2010' as date)  AND cast('02/01/2010' as date)-1
     
    )
    select extract(day FROM jour),somme from plage_date
    union all
    SELECT extract(day FROM date_heure) AS jr,sum(PUISS_ACTIVE_PRODUITE)  FROM DATA_10MIN  GROUP BY jr GROUP BY jr
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 291
    Points : 144
    Points
    144
    Par défaut
    Je vais pouvoir me débrouiller avec ca.

    Merci pour l'aide

  6. #6
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    Bonjour,

    Le code précédent affiche les dates en double, celles oû la somme est >0
    Je pense que celui-ci est plus correct :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    with RECURSIVE plage_date as
    (
     select cast('01/01/2010' as date) as jour, 0  as somme from rdb$database
      UNION ALL
      select dateadd(day, 1, jour),0 from plage_date
      where jour BETWEEN CAST('01/01/2010' as date)  AND cast('02/01/2010' as date)-1
    )
    select Extract(day from plage_date.jour),   COALESCE(sum(DATA_10MIN.PUISS_ACTIVE_PRODUITE),0)
    from DATA_10MIN RIGHT join plage_date on DATA_10MIN.date_heure=plage_date.jour group by  plage_date.jour

    Il faudra mettre ça dans une PS pour pouvoir paramétrer les dates.
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

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

Discussions similaires

  1. Probleme de requete avec MAX sur champ de type date
    Par boutmos dans le forum Requêtes
    Réponses: 6
    Dernier message: 11/04/2013, 10h02
  2. Probleme sur requete avec LIKE
    Par cryosore dans le forum JDBC
    Réponses: 13
    Dernier message: 23/04/2009, 14h23
  3. Probleme sur requete de mise à jour
    Par kikilevrai dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 08/01/2007, 11h54
  4. Probleme de requetes avec SQLQuery
    Par Floverdoz dans le forum Bases de données
    Réponses: 19
    Dernier message: 01/06/2005, 16h43
  5. probleme de requete avec reprise du resultat :
    Par Maxoo dans le forum Langage SQL
    Réponses: 6
    Dernier message: 13/12/2004, 20h05

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