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 d'une date


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2019
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2019
    Messages : 20
    Points : 9
    Points
    9
    Par défaut Somme d'une date
    Bonjour à tous

    J’ai besoin de vos supports à fin de trouver une solution pour résoudre un problème qu’il m’occupe depuis deux semaines

    J’ai deux vues :
    La première vue (DATA) m’affiche : ( équipement, description, ligne, date, T_ouverture_EQ)
    La deuxième vue (LIGNE) me donne (ligne, T_ouverture_LIGNE)

    J’ai créé une troisième vue (MTBF)pour consolider les deux données avec une jointure interne par ligne
    pour but d’afficher le T_ouverture_EQ par jour et la somme de T_ouverture_LIGNE pour une même période.
    Mon problème est le suivant :
    je n'ai pas pu afficher le T_ouverture_Ligne pour une période bien défini (il m'affiche la somme des données de tous la base)

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Pour obtenir de l'aide, il faut que vous communiquiez le script des 3 vues (CREATE VUE)

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2019
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2019
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Merci pour votre réactivité

    Ci joint les trois vues

    1er vue DATA:
    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
    CREATE OR REPLACE FORCE VIEW "COSWIN"."VIST_DATA" ("EQUIPMENT", "DESCRIPTION", "LIGNE", "ZONE", "CRITIQUE", "FONCTION", "DATE_", "T_OUVERTURE", "N_OT", "T_ARRET") AS 
      SELECT EREQ_CODE AS EQUIPMENT,
    	 ereq_description AS DESCRIPTION,
       EREQ_PARENT_EQUIPMENT AS LIGNE,
    	 EREQ_ZONE AS ZONE,
    	 ereq_boolean1 AS CRITIQUE,
    	 EREQ_CATEGORY AS FONCTION,
    	 EQFR_DATE1 AS DATE_,
       EQFR_NUMBER1 AS T_OUVERTURE,
    	 EQFR_NUMBER2 AS N_OT,
    	 EQFR_NUMBER3 AS T_ARRET
      FROM EQUIPMENT
        LEFT OUTER JOIN EQUIPMENT_FREE
                 ON EQUIPMENT.EREQ_CODE=EQUIPMENT_FREE.EQFR_EQUIPMENT
    WHERE EREQ_ENTITY='TPM' AND EREQ_EQUIPMENT_STATUS='N' and EREQ_LEVEL=2 AND EQFR_DATE1 >TO_DATE ('12/31/2018 00:00:00', 'MM/DD/YYYY HH24:MI:SS')
          ORDER BY EQUIPMENT,
                   DATE_ desc;
    2ème vue LIGNE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE OR REPLACE FORCE VIEW "COSWIN"."VIST_LIGNE" ("LIGNE", "TO_LIGNE", "NB_LIGNE") AS 
      select ligne,sum(TO_LIGNE) TO_LIGNE, sum(NB) NB_LIGNE
    from
    ( select ligne,DATE_, MAX(t_ouverture) TO_LIGNE, count(*) NB
    from
    ( SELECT EREQ_CODE AS MACHINE, EREQ_PARENT_EQUIPMENT AS LIGNE, EQFR_DATE1 AS DATE_, EQFR_NUMBER1 AS T_OUVERTURE
      FROM EQUIPMENT
        LEFT OUTER JOIN EQUIPMENT_FREE ON EQUIPMENT.EREQ_CODE=EQUIPMENT_FREE.EQFR_EQUIPMENT
    WHERE EREQ_ENTITY='TPM' AND EREQ_EQUIPMENT_STATUS='N' and EREQ_LEVEL=2 AND EQFR_DATE1 >TO_DATE ('12/31/2018 00:00:00', 'MM/DD/YYYY HH24:MI:SS')
    )
    group by ligne,DATE_
    )
    group by ligne
    order by ligne asc;
    3ème vue MTBF
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE OR REPLACE FORCE VIEW "COSWIN"."VIST_MTBF" ("EQUIPMENT", "DESCRIPTION", "PARENT_", "ZONE", "DATE_", "TO_EQUI", "N_OT", "T_ARRET", "LIGNE", "TO_LIGNE", "NB_LIGNE") AS 
      SELECT D.EQUIPMENT, D.DESCRIPTION, D.LIGNE PARENT_, D.ZONE, D.DATE_, D.T_OUVERTURE TO_EQUI, D.N_OT, D.T_ARRET,L.LIGNE, L.TO_LIGNE, L.NB_LIGNE
    FROM VIST_DATA D
          INNER JOIN VIST_LIGNE L
                  ON D.LIGNE= L.LIGNE;

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Je ne vois pas trop ce que vous voulez faire, mais je pense qu'il faut que vous vous inspiriez du code de la vue de VIST_LIGNE mais l'adapter pour rajouter les colonnes nécessaire à l'affichage et au regroupement.
    La jointure des 2 vues n'est probablement pas une bonne piste pour répondre à votre besoin.

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2019
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2019
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Le but de cette vue est d'afficher la somme du temps d'ouverture des lignes (colonne TO_LIGNE) pour une période bien définie,
    et que la somme du temps d'ouverture d'une ligne (colonne TO_LIGNE) égale à la somme du temps d'ouverture d'un équipement (TO_EQUI)
    Ci-joint un exemple:
    temps d'ouverture de l’équipement 10002226 est 4680
    temps d'ouverture de l’équipement 10003229 est 4680
    temps d'ouverture de la ligne ASS-LIGN-13 est 4680 au lieu de 88707
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT D.EQUIPMENT, D.DESCRIPTION, D.LIGNE PARENT_, D.ZONE, D.DATE_, D.T_OUVERTURE TO_EQUI, D.N_OT, D.T_ARRET,L.LIGNE, L.TO_LIGNE, L.NB_LIGNE
    FROM VIST_DATA D
          INNER JOIN VIST_LIGNE L
                  ON D.LIGNE= L.LIGNE
    WHERE D.DATE_>TO_DATE('11/1/2019 00/00/00','MM/DD/YYYY HH24:MI:SS')AND D.LIGNE='ASS-LIHN-13';
    Nom : MTBF.JPG
Affichages : 153
Taille : 107,7 Ko

    le problème ce que même si je fais un filtre sur D.DATE_ le champ TO_LIGNE ne prend pas en considération le filtre, et il me fait la somme depuis (31/12/2018).

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Citation Envoyé par BTB_DOR Voir le message
    le problème ce que même si je fais un filtre sur D.DATE_ le champ TO_LIGNE ne prend pas en considération le filtre, et il me fait la somme depuis (31/12/2018).
    Ben oui, c'est normal, ça fait exactement ce que vous lui avez demander de faire, mais pas ce que vous voulez.
    C'est pourquoi il faut que vous adaptiez la requête VIST_LIGNE pour en créer une nouvelle qui répondra à votre besoin, mais vous ne pouvez pas simplement joindre les 2 vues.

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2019
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2019
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    C'est pourquoi il faut que vous adaptiez la requête VIST_LIGNE pour en créer une nouvelle qui répondra à votre besoin
    Avez-vous une suggestion ou vous pouvez m'aider et me diriger à trouver la bonne solution car je n'ai pas trop de connaissance sur SQL

  8. #8
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    731
    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 : 731
    Points : 1 416
    Points
    1 416
    Par défaut
    Bonjour,

    J'ai tenté une réécriture de votre code.

    Au passage :
    - faire un order by dans une vue c'est mal
    - faire un group by plus précis (group by ligne, DATE_) que les colonnes affichées (ligne) c'est ... perturbant.
    - faire une clause Where pour les colonnes de la table outer revient à faire un Inner
    - faire une vue de vue c'est mal (pas de réutilisabilité du code en SQL)

    Voici le résultat :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    with 
         LIGNE_BY_DATE AS
            (select  E1.EREQ_PARENT_EQUIPMENT   AS ligne#
                    ,EF1.EQFR_DATE1             AS DATE_
                    ,MAX(EF1.EQFR_NUMBER1)      AS TO_LIGNE
                    ,count(*)                   AS NB
              FROM EQUIPMENT E1
                INNER JOIN EQUIPMENT_FREE EF1 
                    ON E1.EREQ_CODE=EF1.EQFR_EQUIPMENT
              WHERE E1.EREQ_ENTITY = 'TPM' 
                  AND E1.EREQ_EQUIPMENT_STATUS = 'N' 
                  and E1.EREQ_LEVEL = 2 
                  AND EF1.EQFR_DATE1 > TO_DATE ('12/31/2018 00:00:00', 'MM/DD/YYYY HH24:MI:SS')
            )
        ,
        LIGNE AS
            (select ligne#
                    ,sum(TO_LIGNE)      AS TO_LIGNE
                    ,sum(NB)            AS NB_LIGNE
             FROM LIGNE_BY_DATE
             GROUP BY ligne
            )
     
    SELECT   E.EREQ_CODE                AS EQUIPMENT
            ,E.ereq_description         AS DESCRIPTION
            ,E.EREQ_PARENT_EQUIPMENT    AS PARENT_
            ,E.EREQ_ZONE                AS ZONE
            ,EF.EQFR_DATE1              AS DATE_
            ,EF.EQFR_NUMBER1            AS TO_EQUI
            ,EF.EQFR_NUMBER2            AS N_OT
            ,EF.EQFR_NUMBER3            AS T_ARRET
     
    FROM EQUIPMENT E
        INNER JOIN EQUIPMENT_FREE EF
            ON E.EREQ_CODE=EF.EQFR_EQUIPMENT        
        INNER JOIN LIGNE L 
            ON L.ligne# = E.EREQ_PARENT_EQUIPMENT
     
    WHERE E.EREQ_ENTITY='TPM' 
        AND E.EREQ_EQUIPMENT_STATUS='N' 
        AND E.EREQ_LEVEL=2 
        AND EQFR_DATE1 > TO_DATE ('12/31/2018 00:00:00', 'MM/DD/YYYY HH24:MI:SS')   
        AND EF.EQFR_DATE1 > TO_DATE('11/1/2019 00/00/00','MM/DD/YYYY HH24:MI:SS')
        AND E.EREQ_PARENT_EQUIPMENT ='ASS-LIHN-13'
    ;
    qu'est-ce que ça donne ?
    Le savoir est une nourriture qui exige des efforts.

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/04/2015, 02h01
  2. Réponses: 3
    Dernier message: 14/05/2012, 12h18
  3. [2008] Membre calculé : Somme cumulative à une date
    Par dream_rachid dans le forum SSAS
    Réponses: 4
    Dernier message: 02/03/2012, 09h52
  4. La somme d'une date avec un number
    Par amine1980 dans le forum PL/SQL
    Réponses: 4
    Dernier message: 02/12/2008, 17h25
  5. Réponses: 2
    Dernier message: 10/07/2007, 10h04

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