¿Cómo puedo COUNT el número de filas en una database para diferentes períodos de time?

Tengo una tabla en un DB de Sybase con una columna createdDateTime. Lo que quiero poder hacer es contar cuántas filas se crearon entre periodos de time específicos pero acumulados, es decir:
7:00 a 7:15
7:00 a 7:30
7:00 a 7:45
7:00 a 8:00 … y así sucesivamente hasta que tenga el último grupo de time, de 7:00 a 18:00.

¿Hay alguna manera de hacer una consulta en SQL que devuelva todas las filas para mí con todos los recuentos de filas?
Time Rows Created
7:00 – 7:15 0
7:00 – 7:30 5
7:00 – 7:45 8
7:00 a 8:00 15
… …

Tengo una solución en este momento, pero me exige ejecutar una consulta parametrizada 44 veces para get todos los datos.

Gracias,

Hace poco blogé sobre este tema exacto, aunque no estoy seguro si funciona en Sybase, aquí está la solución

declare @interval int set @interval = 5 select datepart(hh, DateTimeColumn) , datepart(mi, DateTimeColumn)/@interval*@interval , count(*) from thetable group by datepart(hh, DateTimeColumn) , datepart(mi, DateTimeColumn)/@interval*@interval 

y más detalles http://ebersys.blogspot.com/2010/12/sql-group-datetime-by-arbitrary-time.html

testing esto

  select count(*) from table groupedby createdDateTime where createdDateTime in ( SELECT * FROM table WHERE createdDateTime between createdDateTime ('2011/01/01:07:00', 'yyyy/mm/dd:hh:mm') AND createdDateTime ('2011/01/01:07:15', 'yyyy/mm/dd:hh:mm') ) 

¿Sybase tiene una statement CASE ? Si es así, intente esto:

 SELECT SUM(CASE WHEN CreatedTime BETWEEN ('7:00:00' AND '7:14:59') THEN 1 ELSE 0) as '7-7:15', SUM(CASE WHEN CreatedTime BETWEEN ('7:15:00' AND '7:29:59') THEN 1 ELSE 0) as '7:15-7:30', FROM MyTable Where <conditions> 

Yo uso esto MUCHO en SQL Server.

Puede determinar el cuarto de la hora en que se creó una fila y agrupar por ese valor. Tenga en count que esto es Oracle SQL, pero es probable que Sybase tenga un equivalente.

 select to_char(datetime_created, 'HH24') hour , floor(to_char(datetime_created, 'MI')/15)+1 quarter , count(1) from my_table group by to_char(datetime_created, 'HH24') , floor(to_char(datetime_created, 'MI')/15)+1; 

Tienes periodos irregulares (algunos tienen una duración de 15 minutos, otros duran 1 hora, otros duran unas pocas horas). En ese caso, lo mejor que puede hacer es ejecutar una consulta con declaraciones de casos:

 with thetable as ( SELECT 'TM' code, convert(datetime, '2011-04-15 07:01:00 AM') date, 1 id union all SELECT 'TM', convert(datetime, '2011-04-15 07:05:00 AM'), 2 union all SELECT 'TM', convert(datetime, '2011-04-15 07:08:00 AM'), 3 union all SELECT 'TM', convert(datetime, '2011-04-15 07:20:00 AM'), 4 union all SELECT 'TM', convert(datetime, '2011-04-15 08:25:00 AM'), 5 ) SELECT '07:00 - 07:15' interval, sum(case when CONVERT(varchar, date, 108) between '07:00:00' AND '07:14:59' then 1 else 0 end) counting FROM thetable union select '07:15 - 08:00', sum(case when CONVERT(varchar, date, 108) between '07:15:00' AND '07:59:59' then 1 else 0 end) from thetable union select '08:00 - 09:00', sum(case when CONVERT(varchar, date, 108) between '07:59:59' AND '08:59:59' then 1 else 0 end) from thetable 

Ahora, si tuvieras intervalos regulares, harías algo así:

 select counting, dateadd(ms,500-((datepart(ms,interval)+500)%1000),interval) intini from ( SELECT COUNT(1) counting, CONVERT(datetime, round(floor(CONVERT(float, date) * 24 * 4) / (24 * 4), 11)) interval FROM ( SELECT 'TM' code, convert(datetime, '2011-04-15 07:01:00 AM') date, 1 id union all SELECT 'TM', convert(datetime, '2011-04-15 07:05:00 AM'), 2 union all SELECT 'TM', convert(datetime, '2011-04-15 07:08:00 AM'), 3 union all SELECT 'TM', convert(datetime, '2011-04-15 07:20:00 AM'), 4 union all SELECT 'TM', convert(datetime, '2011-04-15 08:25:00 AM'), 5 ) thetable group by FLOOR(CONVERT(float, date) * 24 * 4) ) thetable2 

Observe que 24 * 4 es el intervalo de 15 minutos. Si su intervalo es de 1 hora, debe replacelo por 24. Si su intervalo es de 10 minutos, debería ser de 24 * 6. Creo que ya entendió la image.