Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/01/2011, 13h07   #1
Membre Expert
 
Inscription : mai 2004
Messages : 1 253
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 1 253
Points : 1 290
Points : 1 290
Par défaut Comparaison de dates > 15 minutes

Bonjour,

J'ai une table décrite comme suit :

Code :
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 :
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 !
dingoth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 14h20   #2
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 311
Points : 5 808
Points : 5 808
Code :
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
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 14h22   #3
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Code :
AND numtodsinterval(m2.time - m1.time, 'DAY') > numtodsinterval(15,'MINUTE');
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 14h42   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 463
Points : 10 463
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Code :
m2.time - m1.time > 15/24/60
Est-ce que les messages sont uniques dans un même groupe ?
__________________
Email : http://scr.im/waldar
Waldar est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 15h48   #5
Membre Expert
 
Inscription : mai 2004
Messages : 1 253
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 1 253
Points : 1 290
Points : 1 290
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.
dingoth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 15h59   #6
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 463
Points : 10 463
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Vous pouvez alors éviter la jointure en faisant un pivot :
Code :
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
__________________
Email : http://scr.im/waldar
Waldar est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 16h50   #7
Membre Expert
 
Inscription : mai 2004
Messages : 1 253
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 1 253
Points : 1 290
Points : 1 290
Merci ! C'est bien plus rapide dans ma BDD de 1000000 records
dingoth est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h31.


 
 
 
 
Partenaires

Hébergement Web