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 :

Recherche record spécifique


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 98
    Points : 40
    Points
    40
    Par défaut Recherche record spécifique
    Bonjour,

    J'aimerais rechercher dans ma base de données tous les records où la décharge n'a pas encore été flagée (reason= 'Discharge' and flag='0') là où on a déja une charge effectuée (reason= 'Loading' and flag='1') avec un voyage_id > que celui que l'on cherche pour le même nom.
    Le but est de s'assurer que pour le même nom, nous n'avons pas de charge effectuée et flagée avant la décharge précédante.

    id voyage_id transport_type name voyage_nbr reason date flag
    123456 10123 RUN toto 2019111 Loading 05-Sep-19 1
    125142 10123 RUN toto 2019111 Discharge 08-Sep-19 1
    125199 10123 RUN toto 2019111 Discharge 15-Sep-19 0
    126001 10124 RUN toto 2019112 Loading 17-Sep-19 1
    126002 10124 RUN toto 2019112 Discharge 20-Sep-19 0
    126004 10125 RUN toto 2019113 Loading 23-Sep-19 0
    126007 10125 RUN toto 2019113 Discharge 27-Sep-19 0
    126009 10126 RUN tata 2019114 Loading 30-Sep-19 1
    126011 10126 RUN tata 2019114 Discharge 02-Oct-19 1
    126013 10127 RUN tata 2019115 Loading 07-Oct-19 1
    126015 10127 RUN tata 2019115 Discharge 09-Oct-19 0

    Dans ce cas précis, ma recherche devrait identifier la ligne suivante:

    id voyage_id transport_type name voyage_nbr reason date flag
    125199 10123 RUN toto 2019111 Discharge 15-Sep-19 0


    Merci pour votre aide.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Bonjour,
    Comme tout est dans la même table, il suffit de faire une jointure de la table "sur elle-même", en utilisant des alias.
    Les critères de jointure sont ceux que tu as donné dans ta demande (avec un voyage_id > que celui que l'on cherche pour le même nom), idem pour les filtres (reason= 'Discharge' and flag='0' pour l'un des alias, reason= 'Loading' and flag='1' pour l'autre).

    Il faudra peut-être ajouter un DISTINCT pour éliminer les doublons.

    Tatayo.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 98
    Points : 40
    Points
    40
    Par défaut
    J'ai essayé ceci mais cela ne m'a rien donné:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select distinct v1.id, v1.voyage_id, v1.transport_type, v1.name, v1.voyage_nbr, v1.flag 
    from table v1 inner join table v2 on v2.id = v1.id 
    where v1.name = v2.name and v1.TRANSPORT_TYPE = 'RUN' and v2.TRANSPORT_TYPE = 'RUN' and v1.date > (select sysdate -30 from dual) and v1.flag = '0' and (v2.date < v1.date)
    Que pourrais-je adapter?

    Merci pour vos lumières

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Pour moi il faut enlever id de la jointure, puisque d'après ta demande le "rapprochement" se fait uniquement sur le nom.

    Tatayo

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 98
    Points : 40
    Points
    40
    Par défaut
    Est-ce que tu adapterais/simplifierais ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select distinct v1.* from table v1 inner join table v2 on v2.name = v1.name where v1.date > (select sysdate -30 from dual) and v1.TRANSPORT_TYPE = 'RUN' and v2.TRANSPORT_TYPE = 'RUN' and v1.REASON = 'DIS' and v2.REASON = 'LOD' and v1.voyage_id < v2.voyage_id and v2.flag= '1' and v1.flag = '0' and v1.date < v2.date
    Merci pour ton aide.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select sysdate -30 from dual
    Oracle ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 98
    Points : 40
    Points
    40
    Par défaut
    Oui, oups je viens de voir que je m'étais trompé de section.

    Autre chose concernant ma requête?

  8. #8
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    Inutile de passer par une sous-requête pour la date -30 jours
    A voir si c'est bien de joindre les deux tables via "TRANSPORT_TYPE" vu que les valeurs recherchées sont identiques

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select distinct v1.* 
    from table v1 
      inner join table v2 
        on v2.name = v1.name
        and v1.TRANSPORT_TYPE = v2.TRANSPORT_TYPE
    where v1.date > sysdate -30
    and v1.date < v2.date
    and v1.voyage_id < v2.voyage_id 
    and v1.TRANSPORT_TYPE = 'RUN' 
    and v1.REASON = 'DIS' 
    and v2.REASON = 'LOD'
    and v2.flag= '1' 
    and v1.flag = '0'

Discussions similaires

  1. [XL-MAC 2011] Problème d'un rechercher/remplacer spécifique (!PC et MAC!)
    Par RyuAutodidacte dans le forum Macros et VBA Excel
    Réponses: 28
    Dernier message: 17/05/2015, 12h43
  2. Ouvrir un formulaire Access 2007 sur un record spécifique
    Par houleyh dans le forum VBA Access
    Réponses: 9
    Dernier message: 28/09/2013, 12h08
  3. Réponses: 6
    Dernier message: 20/11/2011, 18h05
  4. [XL-2003] Recherche Valeurs Spécifiques
    Par lafafmentvotre dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 11/06/2009, 15h18
  5. [FLASH] [Son] Recherche son spécifique
    Par cedonline dans le forum Flash
    Réponses: 1
    Dernier message: 09/11/2005, 18h45

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