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 :

RDG assez compliquée


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Janvier 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2021
    Messages : 5
    Points : 3
    Points
    3
    Par défaut RDG assez compliquée
    Bonjour à tous , je vous remercie d'avance pour votre temps

    J'ai un délai à calculer à partir d'une seule table X

    Dans cette table chaque dossier contient des evenements que l'on notera de 1 à 10 et chaque evenement correspond à une date , il y'a plusieurs dossier dans la table et chaque dossier contient plusieurs evenements.

    J'aimerai calculer la difference entre l'evenement 5 et 6 ( Date evenement 6 - Date evenement 5 ) , sauf que ces evenements peuvent se repeter pour le meme dossier et donc j'aimerai avoir à la fin : La somme des délais ( Date 6 - Date 5 ) pour un dossier.

    comment je peux faire cela ?

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 814
    Points
    17 814
    Par défaut
    Quel est votre SGBD ?

  3. #3
    Candidat au Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Janvier 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2021
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Quel est votre SGBD ?
    Oracle 11g

  4. #4
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 146
    Points : 7 388
    Points
    7 388
    Billets dans le blog
    1
    Par défaut
    Il y a un trou dans la raquette dans votre énoncé.

    Vous dites qu'il peu y avoir plusieurs événement 5 et 6 pour un même dossier.

    Et qu'au final vous voulez la somme des délais 6 - 5 pour chaque dossier.

    Mais il nous manque deux informations :
    - Y a-t-il forcément autant d'événements 5 et 6 pour chaque dossier ?
    - Comme faire la somme de tous les 6 - 5 dans un même dossier ? On les cumule par ordre croissant ? On fait un produit cartésien et on cumule toutes les combinaisons possibles ?
    On ne jouit bien que de ce qu’on partage.

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 814
    Points
    17 814
    Par défaut
    En supposant que les 5 et 6 s'alternent correctement, quelque chose comme ceci devrait fonctionner :
    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
    with cte_data (dossier, evt, dt_evt) as
    (
    select 1, 1, to_date('2021-01-01 12:01:00', 'yyyy-mm-dd hh24:mi:ss') from dual union all
    select 1, 5, to_date('2021-01-03 11:05:00', 'yyyy-mm-dd hh24:mi:ss') from dual union all
    select 1, 6, to_date('2021-01-04 10:07:00', 'yyyy-mm-dd hh24:mi:ss') from dual union all
    select 2, 1, to_date('2021-01-01 09:45:00', 'yyyy-mm-dd hh24:mi:ss') from dual union all
    select 2, 5, to_date('2021-01-03 08:23:00', 'yyyy-mm-dd hh24:mi:ss') from dual union all
    select 2, 6, to_date('2021-01-04 07:05:00', 'yyyy-mm-dd hh24:mi:ss') from dual union all
    select 2, 5, to_date('2021-01-06 06:32:00', 'yyyy-mm-dd hh24:mi:ss') from dual union all
    select 2, 6, to_date('2021-01-12 05:15:00', 'yyyy-mm-dd hh24:mi:ss') from dual union all
    select 3, 1, to_date('2021-01-01 04:59:00', 'yyyy-mm-dd hh24:mi:ss') from dual
    )
      ,  cte_grp (dossier, evt, dt_evt, grp) as
    (
    select dossier, evt, dt_evt
         , floor((row_number() over(partition by dossier order by dt_evt) - 1)/ 2) as grp
      from cte_data
     where evt in (5, 6)
    )
      ,  cte_pivot (dossier, dt_evt_5, dt_evt_6) as
    (
      select dossier
           , max(case evt when 5 then dt_evt end) as dt_evt_5
           , max(case evt when 6 then dt_evt end) as dt_evt_6
        from cte_grp
    group by dossier, grp
    )
      select dossier, sum(dt_evt_6 - dt_evt_5)
        from cte_pivot
    group by dossier;

  6. #6
    Candidat au Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Janvier 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2021
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Il y a un trou dans la raquette dans votre énoncé.

    Vous dites qu'il peu y avoir plusieurs événement 5 et 6 pour un même dossier.

    Et qu'au final vous voulez la somme des délais 6 - 5 pour chaque dossier.

    Mais il nous manque deux informations :
    - Y a-t-il forcément autant d'événements 5 et 6 pour chaque dossier ?
    - Comme faire la somme de tous les 6 - 5 dans un même dossier ? On les cumule par ordre croissant ? On fait un produit cartésien et on cumule toutes les combinaisons possibles ?

    - Pas forcément le meme nombre d'evenement 5 - 6 dans chaque dossier ca peut aller de 2 fois à 20 fois. ( sinon j'aurai pu pivoter si le nombre etait fixe à 2 ou 3 et creer 6 colonnes et faire la somme de chaque 5 - 6 à part et sommer par la suite )
    - Chaque evenement 5 vient avant un 6 , puis d'autres evenement peuvent venir et on peut retrouver un 5 puis un 6 .

    Au fait il s'agit d'un délai d'attente d'un navire en RADE ( zone de stationnement à l'exterieur du port ) , le navire peut attendre en RADE puis entrer au port puis ressortir et entrer encore une fois pour des opérations puis ressortir et entre encore.

    L'objectif etant de calculer la somme de ces 3 délais qui constitue le délai global d'attente en RADE

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 135
    Points : 1 913
    Points
    1 913
    Par défaut
    Bonjour,

    Pourrais-tu fournir un jeu de données avec le résultat attendu?
    Merci

  8. #8
    Candidat au Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Janvier 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2021
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Numero escale Type_mvt Date
    2015 1 Date1
    2015 5 Date 2
    2015 6 Date 3
    2015 4 Date 4
    2015 5 Date 5
    2015 6 Date 6
    2016
    ...

    Je voudrais avoir pour chaque escale : la somme de
    (Date 3 - Date 2 ) + ( Date 6 - Date 5 )
    evenement 5 - Evenement 6

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 814
    Points
    17 814
    Par défaut
    La solution que je vous ai proposée ne fonctionne pas ?

  10. #10
    Candidat au Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Janvier 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2021
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Waldar Voir le message
    En supposant que les 5 et 6 s'alternent correctement, quelque chose comme ceci devrait fonctionner :
    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
    with cte_data (dossier, evt, dt_evt) as
    (
    select 1, 1, to_date('2021-01-01 12:01:00', 'yyyy-mm-dd hh24:mi:ss') from dual union all
    select 1, 5, to_date('2021-01-03 11:05:00', 'yyyy-mm-dd hh24:mi:ss') from dual union all
    select 1, 6, to_date('2021-01-04 10:07:00', 'yyyy-mm-dd hh24:mi:ss') from dual union all
    select 2, 1, to_date('2021-01-01 09:45:00', 'yyyy-mm-dd hh24:mi:ss') from dual union all
    select 2, 5, to_date('2021-01-03 08:23:00', 'yyyy-mm-dd hh24:mi:ss') from dual union all
    select 2, 6, to_date('2021-01-04 07:05:00', 'yyyy-mm-dd hh24:mi:ss') from dual union all
    select 2, 5, to_date('2021-01-06 06:32:00', 'yyyy-mm-dd hh24:mi:ss') from dual union all
    select 2, 6, to_date('2021-01-12 05:15:00', 'yyyy-mm-dd hh24:mi:ss') from dual union all
    select 3, 1, to_date('2021-01-01 04:59:00', 'yyyy-mm-dd hh24:mi:ss') from dual
    )
      ,  cte_grp (dossier, evt, dt_evt, grp) as
    (
    select dossier, evt, dt_evt
         , floor((row_number() over(partition by dossier order by dt_evt) - 1)/ 2) as grp
      from cte_data
     where evt in (5, 6)
    )
      ,  cte_pivot (dossier, dt_evt_5, dt_evt_6) as
    (
      select dossier
           , max(case evt when 5 then dt_evt end) as dt_evt_5
           , max(case evt when 6 then dt_evt end) as dt_evt_6
        from cte_grp
    group by dossier, grp
    )
      select dossier, sum(dt_evt_6 - dt_evt_5)
        from cte_pivot
    group by dossier;


    Excellent je viens de tester , ca marche. Merci beaucoup

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

Discussions similaires

  1. [Impression] Job assez compliqué
    Par narmataru dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 17/12/2008, 19h37
  2. convertion assez compliquée
    Par Rafoo dans le forum C++
    Réponses: 8
    Dernier message: 03/08/2006, 19h53
  3. [MySQL] Afficher une page avec les données de la base de données... Assez compliqué
    Par snakejl dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 19/05/2006, 11h46
  4. Requete assez compliqué avec plusieur resultat
    Par castelligreg dans le forum Access
    Réponses: 3
    Dernier message: 18/04/2006, 23h27
  5. Réponses: 4
    Dernier message: 15/09/2005, 15h21

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