Eviterei di cercare di risolvere il problema via SQL perché la vedo dura, anche in considerazione del fatto che la data e l'ora sono in due campi distinti.

Sicuramente esistono più approcci; io farei così:

1- caricare tutto il recordset ordinato per data e ora in un vettore di tipo Date avendo cura di riunire in un solo valore data e ora (in pratica sarebbe DateTime);
2- stabilire il limite superiore del primo intervallo; in pratica le ore 0 più i minuti specificati:
3- con un ciclo scorrere il vettore contando gli elementi, fino a non superare questo limite o fino a fine vettore;
4- memorizzare il conteggio;
5- incrementare il limite di un uguale valore;
6- ripetere dal punto 3.

Per quanto riguarda la rappresentazione grafica... una cosa alla volta. Dipenderà comunque da cosa userai per tracciare il grafico.

Segnalo ad un moderatore il crossposting