Voici un essai en utilisant ces exemples de données. Pour la prochaine fois s'il vous plaît fournir quelques exemples de données vous-même.
SQL> create table event_table (event_number,object_name,event_time,event_supplementary_info)
2 as
3 select 1, 'A', sysdate - 7, 'info' from dual union all
4 select 1, 'B', sysdate - 7, 'info' from dual union all
5 select 1, 'B', sysdate - 7, 'info' from dual union all
6 select 2, 'A', sysdate - 6, 'info' from dual union all
7 select 2, 'B', sysdate - 6, 'info' from dual union all
8 select 2, 'B', sysdate - 6, 'info' from dual union all
9 select 3, 'A', sysdate - 5, 'info' from dual union all
10 select 3, 'A', sysdate - 5, 'info' from dual union all
11 select 4, 'C', sysdate - 4, 'info' from dual union all
12 select 4, 'C', sysdate - 4, 'info' from dual union all
13 select 4, 'C', sysdate - 4, 'info' from dual union all
14 select 4, 'C', sysdate - 4, 'info' from dual union all
15 select 4, 'C', sysdate - 4, 'info' from dual union all
16 select 4, 'D', sysdate - 4, 'info' from dual union all
17 select 5, 'A', sysdate - 3, 'info' from dual union all
18 select 6, 'D', sysdate - 2, 'info' from dual union all
19 select 6, 'D', sysdate - 2, 'info' from dual union all
20 select 7, 'A', sysdate - 1, 'info' from dual union all
21 select 7, 'A', sysdate - 1, 'info' from dual union all
22 select 7, 'A', sysdate - 1, 'info' from dual union all
23 select 7, 'A', sysdate - 1, 'info' from dual
24/
Table created.
Votre requête ne fonctionne pas: il y a des crochets droits superflus. Si je les supprimer, cela ne fonctionne toujours pas parce que vous comparez les dates avec de varchar2:
SQL> select object_name,
2 event_number,
3 count(*),
4 event_supplementary_info
5 from event_table
6 where event_time between to_char(sysdate -7, 'YYYY-MM-DD')
7 and to_char(sysdate , 'YYYY-MM-DD')
8 group by object_name, event_number, event_supplementary_info
9/
no rows selected
Donc, ma requête de base est celui-ci où je compare les dates avec les dates:
SQL> select object_name
2 , event_number
3 , count(*)
4 , event_supplementary_info
5 from event_table
6 where event_time between sysdate -7 and sysdate
7 group by object_name
8 , event_number
9 , event_supplementary_info
10 order by object_name
11 , event_number
12/
O EVENT_NUMBER COUNT(*) EVEN
- ------------ ---------- ----
A 1 1 info
A 2 1 info
A 3 2 info
A 5 1 info
A 7 4 info
B 1 2 info
B 2 2 info
C 4 5 info
D 4 1 info
D 6 2 info
10 rows selected.
J'Interprété votre question que vous voulez un enregistrement avec le nombre total d'événements par nom d'objet. Avec cet exemple de données, vous avez besoin de 4 enregistrements supplémentaires, pour les objets A, B, C et D. Pour y parvenir, j'ai ajouté un autre ensemble de regroupement sur juste nom_objet. Et j'ai inclus trunc (event_time) à l'ensemble de regroupement existant pour plus de clarté.
SQL> select object_name
2 , event_number
3 , count(*)
4 , event_supplementary_info
5 , trunc(event_time)
6 from event_table
7 where event_time between sysdate -7 and sysdate
8 group by grouping sets
9 ((object_name
10 , event_number
11 , event_supplementary_info
12 , trunc(event_time)
13 )
14 , (object_name)
15 )
16 order by object_name
17 , event_number
18/
O EVENT_NUMBER COUNT(*) EVEN TRUNC(EVENT_TIME)
- ------------ ---------- ---- -------------------
A 1 1 info 15-08-2010 00:00:00
A 2 1 info 16-08-2010 00:00:00
A 3 2 info 17-08-2010 00:00:00
A 5 1 info 19-08-2010 00:00:00
A 7 4 info 21-08-2010 00:00:00
A 9
B 1 2 info 15-08-2010 00:00:00
B 2 2 info 16-08-2010 00:00:00
B 4
C 4 5 info 18-08-2010 00:00:00
C 5
D 4 1 info 18-08-2010 00:00:00
D 6 2 info 20-08-2010 00:00:00
D 3
14 rows selected.
La courte façon d'écrire une telle requête, est de convertir les ensembles de regroupement à un Rollup:
SQL> select object_name
2 , event_number
3 , count(*)
4 , event_supplementary_info
5 , trunc(event_time)
6 from event_table
7 where event_time between sysdate -7 and sysdate
8 group by object_name
9 , rollup ((event_number,event_supplementary_info,trunc(event_time)))
10 order by object_name
11 , event_number
12/
O EVENT_NUMBER COUNT(*) EVEN TRUNC(EVENT_TIME)
- ------------ ---------- ---- -------------------
A 1 1 info 15-08-2010 00:00:00
A 2 1 info 16-08-2010 00:00:00
A 3 2 info 17-08-2010 00:00:00
A 5 1 info 19-08-2010 00:00:00
A 7 4 info 21-08-2010 00:00:00
A 9
B 1 2 info 15-08-2010 00:00:00
B 2 2 info 16-08-2010 00:00:00
B 4
C 4 5 info 18-08-2010 00:00:00
C 5
D 4 1 info 18-08-2010 00:00:00
D 6 2 info 20-08-2010 00:00:00
D 3
14 rows selected.
Cordialement, Rob .
Veuillez ajouter quelques exemples de données d'entrée et la sortie attendue. –