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 29/08/2011, 11h35   #1
Membre du Club
 
Inscription : septembre 2004
Messages : 191
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 191
Points : 54
Points : 54
Par défaut Obtenir la dernière valeur d'un champs pour des périodes

Bonjour à tous.

Le query que je dois réussir à faire est théoriquement simple à comprendre mais je pense assez difficile à créer.

J'ai la table suivante:

Code :
1
2
3
4
5
6
CREATE TABLE "TEST_TABLE"
(
	"TID"           NUMBER(8),
	"TIMESTAMP"     DATE,
	"AVAILABILTY"   VARCHAR2(1) NOT NULL
);
Avec les données suivantes:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
INSERT INTO TEST_TABLE (TID,TIMESTAMP,AVAILABILTY) VALUES ( 1 ,TO_DATE('29/08/2011 10:01','DD/MM/YYYY HH24:MI'), 'Y');
INSERT INTO TEST_TABLE (TID,TIMESTAMP,AVAILABILTY) VALUES ( 1 ,TO_DATE('29/08/2011 10:02','DD/MM/YYYY HH24:MI'), 'N');
INSERT INTO TEST_TABLE (TID,TIMESTAMP,AVAILABILTY) VALUES ( 1 ,TO_DATE('29/08/2011 10:04','DD/MM/YYYY HH24:MI'), 'Y');
INSERT INTO TEST_TABLE (TID,TIMESTAMP,AVAILABILTY) VALUES ( 1 ,TO_DATE('29/08/2011 10:06','DD/MM/YYYY HH24:MI'), 'N');
INSERT INTO TEST_TABLE (TID,TIMESTAMP,AVAILABILTY) VALUES ( 1 ,TO_DATE('29/08/2011 10:07','DD/MM/YYYY HH24:MI'), 'Y');
INSERT INTO TEST_TABLE (TID,TIMESTAMP,AVAILABILTY) VALUES ( 1 ,TO_DATE('29/08/2011 10:08','DD/MM/YYYY HH24:MI'), 'N');
 
INSERT INTO TEST_TABLE (TID,TIMESTAMP,AVAILABILTY) VALUES ( 2 ,TO_DATE('29/08/2011 10:01','DD/MM/YYYY HH24:MI'), 'N');
INSERT INTO TEST_TABLE (TID,TIMESTAMP,AVAILABILTY) VALUES ( 2 ,TO_DATE('29/08/2011 10:02','DD/MM/YYYY HH24:MI'), 'Y');
INSERT INTO TEST_TABLE (TID,TIMESTAMP,AVAILABILTY) VALUES ( 2 ,TO_DATE('29/08/2011 10:04','DD/MM/YYYY HH24:MI'), 'N');
INSERT INTO TEST_TABLE (TID,TIMESTAMP,AVAILABILTY) VALUES ( 2 ,TO_DATE('29/08/2011 10:06','DD/MM/YYYY HH24:MI'), 'Y');
INSERT INTO TEST_TABLE (TID,TIMESTAMP,AVAILABILTY) VALUES ( 2 ,TO_DATE('29/08/2011 10:07','DD/MM/YYYY HH24:MI'), 'N');
INSERT INTO TEST_TABLE (TID,TIMESTAMP,AVAILABILTY) VALUES ( 2 ,TO_DATE('29/08/2011 10:09','DD/MM/YYYY HH24:MI'), 'Y');
Mon but est de connaitre pour chaque TID différent la dernière valeur d'AVAILABILITY par tranche de 5 min.

Bref dans l'exemple ci-dessus, la réponse devrait donner pour le TID 1:
- de 10h00 à 10h05 => Y (venant du record de 10h04)
- de 10h05 à 10h10 => N (venant du record de 10h08)
Et pour le TID 2:
- de 10h00 à 10h05 => N (venant du record de 10h04)
- de 10h05 à 10h10 => Y (venant du record de 10h09)


Alors je suis parvenu à faire le group by par 5 min via cette source mais pour la suite je sèche...

Voici la query:

Code :
1
2
3
4
5
SELECT 
	ceil((TIMESTAMP-date '-4712-01-01')*288)/288+date '-4712-01-01',tid
FROM TEST_TABLE
GROUP BY 
  ceil((TIMESTAMP-date '-4712-01-01')*288)/288+date '-4712-01-01', tid;
Seulement maintenant ce que je veux obtenir c'est l'AVAILABILITY de ce dernier record pour la période X et le TID Y.

Pouvez-vous m'aider?
k o D est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2011, 12h14   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
La réponse était également présente dans le lien.
Regarde FIRST et LAST
Code :
1
2
3
4
5
6
7
8
9
10
11
12
SELECT tid,
       to_char(ceil((TIMESTAMP-date '-4712-01-01')*288)/288+date '-4712-01-01', 'DD/MM/YYYY HH24:MI:SS'),
       max(AVAILABILTY) keep (dense_rank last ORDER BY TIMESTAMP)
  FROM TEST_TABLE
 GROUP BY tid, ceil((TIMESTAMP-date '-4712-01-01')*288)/288+date '-4712-01-01';
 
       TID TO_CHAR(CEIL((TIMES M
---------- ------------------- -
         1 29/08/2011 10:05:00 Y
         1 29/08/2011 10:10:00 N
         2 29/08/2011 10:05:00 N
         2 29/08/2011 10:10:00 Y
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2011, 12h22   #3
Membre du Club
 
Inscription : septembre 2004
Messages : 191
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 191
Points : 54
Points : 54
En effet... honte sur moi

Je te remercie pour m'avoir répondu.
k o D 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 14h38.


 
 
 
 
Partenaires

Hébergement Web