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 :

Comparaison de dates > 15 minutes


Sujet :

SQL Oracle

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut Comparaison de dates > 15 minutes
    Bonjour,

    J'ai une table décrite comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE message (
      type VARCHAR2(50),
      time DATE,
      grp VARCHAR2(10)
    )
    Je sais que les messages du type "abc" ont une valeur pour time inférieure aux messages du type "bcd" au sein d'un même groupe.

    Je voudrais extraire de la table les groupes dont le message "bcd" a un time supérieur à "abc" de 15 minutes.

    Comment faire ?

    Pour l'instant, je suis parti sur cette idée mais je ne sais pas comment la terminer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT
      m1.grp AS grp
    FROM
      message m1,
      message m2
    WHERE
          m1.grp = m2.grp
      AND m1.name = 'abc'
      AND m2.name = 'bcd'
      AND numtodsinterval(m2.time - m1.time, 'day') > [15 minutes]
    Je ne sais pas par quoi remplacer le [15 minutes] : par un string, un intervalle et surtout, quelle valeur ?

    D'avance merci à qui m'aidera.

    P.S. J'ai pas trouvé mieux que la double jointure sur la même table. S'il y a mieux, je prends bien sûr !

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 
    Connected as mni
     
    SQL> 
    SQL> Select extract(minute from numtodsinterval(sysdate - (sysdate - 1/24/60 * 3),'DAY'))
      2    From dual
      3  /
     
    EXTRACT(MINUTEFROMNUMTODSINTER
    ------------------------------
                                 3

  3. #3
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND numtodsinterval(m2.time - m1.time, 'DAY') > numtodsinterval(15,'MINUTE');

  4. #4
    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 820
    Points
    17 820
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m2.time - m1.time > 15/24/60
    Est-ce que les messages sont uniques dans un même groupe ?

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Merci beaucoup à vous deux. Je prendrai la version d'orafrance qui a le mérite d'être courte et claire.

    @Waldar: Oui, le champ "name" est unique au sein d'un même groupe.

  6. #6
    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 820
    Points
    17 820
    Par défaut
    Vous pouvez alors éviter la jointure en faisant un pivot :
    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
    with message as
    (
    select 'abc' as typ, sysdate     as tim, 1 as grp from dual union all
    select 'bcd'       , sysdate + 20/24/60, 1        from dual union all
    select 'def'       , sysdate           , 1        from dual union all
    select 'abc'       , sysdate + 20/24/60, 2        from dual union all
    select 'bcd'       , sysdate           , 2        from dual
    )
      select grp
        from message
       where typ in ('abc', 'bcd')
    group by grp
      having min(case typ when 'bcd' then tim end) - min(case typ when 'abc' then tim end) > 15/24/60;
     
           GRP
    ----------
             1

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Merci ! C'est bien plus rapide dans ma BDD de 1000000 records

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

Discussions similaires

  1. [Flex3] Comparaison de dates ignorant les heures, minutes etc
    Par karami dans le forum Flex
    Réponses: 1
    Dernier message: 03/06/2011, 10h06
  2. [Dates] Comparaison de date + 5 minutes !
    Par Joe Le Mort dans le forum Langage
    Réponses: 4
    Dernier message: 19/10/2006, 10h33
  3. comparaison de date
    Par nickoshiba dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 15/03/2005, 15h48
  4. Comparaison de dates
    Par Tapioca dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/06/2004, 15h55
  5. Problème de comparaison de dates
    Par MiJack dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/03/2004, 21h43

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