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 02/08/2011, 14h19   #1
Invité de passage
 
Inscription : avril 2007
Messages : 11
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 11
Points : 0
Points : 0
Par défaut Petite aide SQL

Bonjour,
J’ai ma table SERVICE_STATUS :

Code :
1
2
3
4
5
6
7
 
CREATE TABLE SERVICE_STATUS
(
   MLSS_SERV_INST_ID    VARCHAR2(200 BYTE),
   MLSS_STATUS_CODE     VARCHAR2(100),
   MLSS_CREA_DATE       TIMESTAMP (6)
);
Exemple de données :

Code :
1
2
3
4
Monitor1312280355583	0	02/08/11 12:19:15,736000000
Monitor1312280355583	1	02/08/11 12:19:16,885000000
Monitor1312280355583	2	02/08/11 12:19:19,974000000
Monitor1312280355583	Finished  	02/08/11 12:19:25,001000000
0 => initial status pour ID Monitor1312280355583
Finished => la fin des données pour l’ID Monitor1312280355583.

Je souhaite faire une view qui me donne la différence entre les temps :

Code :
1
2
3
Monitor1312280355583	0	02/08/11 12:19:15,736000000
Monitor1312280355583	1	02/08/11 12:19:16,885000000 - (MLSS_CREA_DATE du STATUS0)
Monitor1312280355583	2	02/08/11 12:19:19,974000000(MLSS_CREA_DATE du STATUS1)
Quelqu’un peut me donner un petit coup de main ?
Je peux TOUT modifier dans mes tables.
Ma DB est ORACLE
Vitorlundberg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2011, 14h32   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
Bonjour,

Sur Oracle vous pouvez utiliser la fonction analytique LAG :
http://www.oracle-base.com/articles/...cFunctions.php

Elle permet de retrouver une valeur de la ligne précédente.

Essayez et revenez si vous n'y arrivez pas (il y aura peut-être un problème avec le status "finished")

edit:
pour la clause over(), utilisez seulement un order by si vous ne faites vos testes que sur un MLSS_SERV_INST_ID.

Si vous souhaitez faire cette opération sur toute votre table SERVICE_STATUS, ou sur un ensemble, il faudra alors indiquer une partition sur MLSS_SERV_INST_ID :
Code :
1
2
 
over(partition BY MLSS_SERV_INST_ID ORDER BY MLSS_STATUS_CODE)
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/08/2011, 15h20   #3
Membre éclairé
 
Avatar de boussafi
 
Homme
Ingénieur développement logiciels
Inscription : septembre 2007
Messages : 342
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Industrie

Informations forums :
Inscription : septembre 2007
Messages : 342
Points : 397
Points : 397
Envoyer un message via Yahoo à boussafi Envoyer un message via Skype™ à boussafi
essaye

Code :
1
2
3
4
5
6
SELECT AA.*,BB.*,AA.mlss_crea_date -BB.mlss_crea_date Difference  FROM
(SELECT rownum no_bb ,t.* FROM service_status t)BB ,
(SELECT rownum no_aa ,t.* FROM service_status t)AA
 
 WHERE no_aa>1
 AND no_bb=no_aa-1
à condition que le champ mlss_crea_date soit de type date
boussafi est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h19.


 
 
 
 
Partenaires

Hébergement Web