Je n'ai pas de station oracle sur laquelle tester, mais vous devriez pouvoir simplement enrouler l'agrégateur autour de votre SELECT
en tant que sous-requête/table dérivée/vue en ligne
Ce serait donc (NON TESTÉ !!)
SELECT
AVG(s.c)
, MIN(s.c)
, MAX(s.c)
, s.ID
FROM
--Note this is just your query
(select id, to_char(time), count(*) as c from vehicle_location group by id, to_char(time), min having id = 16) as s
GROUP BY s.ID
Voici quelques lectures à ce sujet :
http://www.devshed.com/c/a/Oracle/Inserting-SubQueries-in-SELECT-Statements-in-Oracle/3/
MODIF : Bien que normalement ce soit un mauvais idée de sélectionner les deux le MIN
et MAX
en une seule requête.
EDIT2 : Le problème min/max est lié à la façon dont certains SGBDR (y compris Oracle) gèrent les agrégations sur des colonnes indexées. Cela peut ne pas affecter cette requête particulière, mais le principe est qu'il est facile d'utiliser l'index pour trouver soit le MIN
ou le MAX
mais pas les deux en même temps car tout indice peut ne pas être utilisé efficacement.
Voici quelques lectures à ce sujet :
http://momendba.blogspot.com/2008/07/min-and-max-functions-in-single-query.html