SQL - CONSULTA DIFICIL.

 
Vista:

CONSULTA DIFICIL.

Publicado por Hubert (98 intervenciones) el 08/11/2006 16:21:22
Isaias.
Buenas.
Este es un pequeño ejemplo de la data tengo un indice por los 3 campos,

cagencia hora_arribo latencion
---------------------------------------------
01 2005-10-11 10:47:46.000 1
01 2005-10-11 10:48:22.000 2

01 2005-10-11 11:01:58.000 1
01 2005-10-11 11:02:02.000 2
01 2005-10-11 11:02:06.000 1

01 2005-10-11 12:01:08.000 1
01 2005-10-11 12:03:32.000 2
01 2005-10-11 12:03:48.000 2

01 2005-10-11 13:02:38.000 2
01 2005-10-11 13:04:09.000 1
01 2005-10-11 13:09:38.000 2
01 2005-10-11 13:10:08.000 1
01 2005-10-11 13:10:31.000 1

01 2005-10-11 14:07:12.000 2
01 2005-10-11 14:15:48.000 1
01 2005-10-11 14:47:35.000 2
01 2005-10-11 14:52:00.000 2

01 2005-10-11 15:05:37.000 2
01 2005-10-11 15:05:54.000 1
01 2005-10-11 16:00:25.000 1

01 2005-10-11 16:00:41.000 2
01 2005-10-11 16:00:43.000 2

Se desea contar el numero de ocurrencias según intervalos de tiempos por grupo cagencia y latencion, para este ejemplo intervalos de una hora (pudiendo ser otros).
**** Como sería el comando SQL******
Hice un SQL y lo coloque en mi consulta anterior al foro.

-1 Este debe ser el resultado para un rago de fecha de "2005-10-11 09:00:00" y "2005-10-11 18:00:00" y cagencia = "01"
Cagencia Intervalos latenccion Ocurrencias
01 10:00 a 10:59 1 1
01 10:00 a 10:59 2 1

01 11:00 a 11:59 1 2
01 11:00 a 11:59 2 1

01 12:00 a 12:59 1 1
01 12:00 a 12:59 2 2

01 13:00 a 13:59 1 3
01 13:00 a 13:59 2 2

01 14:00 a 14:59 1 1
01 14:00 a 14:59 2 3

01 15:00 a 15:59 1 2
01 15:00 a 15:59 2 1

01 16:00 a 16:59 1 0 (o no sacarlo)
01 16:00 a 16:59 2 2

-2 Este debe ser el resultado para un rago de fecha de "2005-10-11 09:00:00" y "2005-10-11 13:00:00" y cagencia = "01"
Cagencia Intervalos latenccion Ocurrencias
01 10:00 a 10:59 1 1
01 10:00 a 10:59 2 1

01 11:00 a 11:59 1 2
01 11:00 a 11:59 2 1

01 12:00 a 12:59 1 1
01 12:00 a 12:59 2 2

COn ese resultado ya podria hacer una Referencia cruzada para obtener (del ultimo resultado 2)

---------- Ocurrencia en intervalos -----------
Cagencia latencion 10:00 a 10:59 11:00 a 11:59 12:00 a 12:59
01 1 1 2 1
02 2 1 1 2


Gracias.
Hubert.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RESUELTO. RE:CONSULTA DIFICIL.

Publicado por Hubert (98 intervenciones) el 09/11/2006 16:04:10
Gracias a mi amiga virtual Liliana Sorrentino.
Me dio la luz para empezar a resolver esta consulta.

La solucion en mi sistema es mas complejo pero la idea de mi solución es esta.
Espero les sirva (la referencia cruzada lo hacen Uds.).

CREATE PROCEDURE Intervalos
(
@cagencia smallint,
@fechaini datetime,
@fechafin datetime,
@intervalo int
)
AS

CREATE TABLE #TablaTiempo ( FechaI datetime, FechaF datetime )

DECLARE @auxinter int
SET @auxinter = @intervalo

INSERT INTO #TablaTiempo VALUES ( @fechaini, DATEADD(mi, @auxinter -1, @fechaini) )

WHILE ( DATEADD(mi, @auxinter, @fechaini) <= @fechafin )
BEGIN
INSERT INTO #TablaTiempo
SELECT DATEADD(mi, @auxinter, FechaI), DATEADD(mi, @auxinter, FechaF) FROM #TablaTiempo
WHERE FechaI <= DATEADD(mi, @auxinter * -1, @fechafin)
SET @auxinter = @auxinter * 2
END

SELECT FechaI, FechaF, cagencia, latencion, Ocurrencias = COUNT(*)
FROM TablaDatos INNER JOIN #TablaTiempo ON hora_arribo BETWEEN FechaI AND FechaF
WHERE cagencia = @cagencia
GROUP BY FechaI, FechaF, cagencia, latencion
go

EXEC Intervalos '2005-10-11 09:00:00', '2005-10-11 18:00:00', 60

Gracias Liliana.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar