Bonjour,

j'ai la table basique suivante :

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);
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.

J'ai pensé utiliser une requête complexe comme celle-ci :
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;
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
 
lieu aujourdhui hier auparavant
   1          1    0          1
   2          1    1          1
   3          2    0          1