Bonjour,
j'ai la table basique suivante :
Je dois récupérer les informations comme suit : le lieu, le nombre d'enregistrement pour le jour-même, le nombre d'enregistrement pour la veille et le nombre d'enregistrement pour l'avant-veille.
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
18
19
20
21
22
23 CREATE TABLE tmptable ( id NUMBER(10) NOT NULL, lieu CHAR(10) NOT NULL, moment DATE DEFAULT SYSDATE NOT NULL, ) ; INSERT INTO tmptable( id , lieu , moment) VALUES ( 1 , 1 , SYSDATE-3); INSERT INTO tmptable( id , lieu , moment) VALUES ( 2 , 2 , SYSDATE-2); INSERT INTO tmptable( id , lieu , moment) VALUES ( 3 , 3 , SYSDATE-2); INSERT INTO tmptable( id , lieu , moment) VALUES ( 4 , 1 , SYSDATE); INSERT INTO tmptable( id , lieu , moment) VALUES ( 5 , 3 , SYSDATE); INSERT INTO tmptable( id , lieu , moment) VALUES ( 6 , 3 , SYSDATE); INSERT INTO tmptable( id , lieu , moment) VALUES ( 7 , 2 , SYSDATE); INSERT INTO tmptable( id , lieu , moment) VALUES ( 8 , 2 , SYSDATE-1);
J'ai pensé utiliser une requête complexe comme celle-ci :
Malheureusement, comme vous pouvez vous en douter, cela ne fonctionne pas. Comment modifier ma requête pour obtenir le résultat suivant (avec le test donné) ?
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 SELECT lieu, COUNT(DISTINCT aj.*) AS aujourdhui, COUNT(DISTINCT hi.*) AS hier, COUNT(DISTINCT au.*) AS auparavant FROM tmptable aj, tmptable hi, tmptable au WHERE (aj.lieu = hi.lieu) AND (aj.lieu = au.lieu) AND (TRUNC(aj.moment) = TRUNC(SYSDATE)) AND (TRUNC(hi.moment) = TRUNC(SYSDATE-1)) AND (TRUNC(au.moment) < TRUNC(SYSDATE-1)) GROUP BY lieu;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 lieu aujourdhui hier auparavant 1 1 0 1 2 1 1 1 3 2 0 1
Partager