Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Crear estadística, agrupar cada x segundo (https://www.clubdelphi.com/foros/showthread.php?t=72307)

BlueSteel 09-02-2011 21:35:29

Crear estadística, agrupar cada x segundo
 
Estimados:

Tengo una tabla que tiene registros como siguen:

Cita:

FECHA_HORA TARJETA LUGAR ASIENTO EVENTO PUERTA
29/01/2011 20:21:05 272 GAL 294 2 1
29/01/2011 19:57:19 55 GAL 623 2 1
29/01/2011 20:25:32 2033 TAG 52 2 3
29/01/2011 20:24:59 35 GAL 312 2 1
29/01/2011 20:16:00 270 GAL 639 2 1
29/01/2011 20:23:13 440 TPG 100 2 5
29/01/2011 21:07:28 1990 TAN 113 2 3
Resulta, que estos datos se obtienen de los ingresos que realizan las personas que compraron asientos en el estadio (Tarjeta es el numero que identifica a cada Credencial y estos pueden ingresar por diferentes puertas...)

Ahora me piden que entregue una estadística de cuantas personas ingresaron por cada puerta, cada X rango de tiempo, puede ser cada 1 minuto o 10 minutos.... Tambien me piden entre otros datos que el informe tenga un grafico (bueno, esto no lo he visto y trabajado, pero no creo que salga tan dificil).... creo que mi problema seria realizar esto a traves de SQL....

Bueno, si alguien tiene un idea, favor indicar ... (espero me entiendan...)

Salu2:p:D

droguerman 09-02-2011 23:23:08

Para SQL Server Podrías hacer algo como esto (para segundos)


Código SQL [-]
CREATE PROCEDURE sp_Reporte
@horaInicio datetime
@horaFin datetime
AS BEGIN
@horaIter datetime;

set @horaIter = @horaInicio;
CREATE TABLE #t (hora datetime);
WHILE @horaIter < @horaFin 
BEGIN
  INSERT INTO #t values(@horaIter);
  -- aquí se necesita un if para saber que parte de la hora se incrementará
  SET @horaIter =  DATEADD(ss, 1, @horaIter);
END;

SELECT t.hora, COUNT(*)
  FROM #t AS t, tickets as I
  WHERE datediff(ss, I.hora, t.hora)<=1;
GROUP BY t.hora
END;

Básicamente crear una tabla con todos los intervalos de fecha y luego mediante inner join contar que diferencias de horas son menores a 1

Neftali [Germán.Estévez] 10-02-2011 11:08:26

Al igual que doguerman, te recomiendo que revises en SQL la sentencia GROUP BY y que hagas algunas pruebas sencillas con ellas. Con eso casi podrás obrtener los resultados que necesitas.

Variando la agrupación obtendrás por hora, por minuto,...

Si la fechay hora las tienes en un único campo, tal vez te será útil crear campos calculados para dividir ese dato en Fecha y Hora por separado.

BlueSteel 14-02-2011 23:44:30

Estimados...

Estoy revisando el procedimiento....:rolleyes::rolleyes: (aunque poco lo entiendo:p)

el campo es de fecha y hora (datetime SQL Server 2005) , pero solo me interesa la hora...

Código SQL [-]
Select Min(Convert(Varchar(8),Ing_Fecha, 108)),Max(Convert(Varchar(8),Ing_Fecha, 108))
From Ingreso
Where Eve_Id=4

Con esto tengo el primer y ultimo ingreso que se realizó al recinto...

Código SQL [-]
Select Ctl_Id, Count(Eve_Id),Min(Convert(Varchar(8),Ing_Fecha, 108)),Max(Convert(Varchar(8),Ing_Fecha, 108))
From
Ingreso
Where Eve_Id=4
Group By Ctl_Id

Con esto obtengo la cantidad de ingresos registrados por cada puerta...y tambien a que hora fue el primer y ultimo ingreso

1 110 19:23:23 20:55:15
3 404 19:23:26 20:59:43
5 96 19:27:08 21:31:10

Y estoy tratando de realizar cuantos ingresos se producen cada 15 minutos...

Salu2:p:cool:

BlueSteel 24-02-2011 22:29:15

Promedio de ingresos en un rango de tiempo
 
Estimados


siguiendo con esto de las estadisticas, necesito en SQL realizar un promedio de cuantas personas ingresaron por segundos, para lo cual tengo los siguientes datos


Cita:


Tipo Ctd 1er_Ingre Ult_Ingre Rango_Tiempo
3 532 19:40:45 21:16:45 01:36:00
1 272 19:40:22 21:00:17 01:19:55
5 144 19:46:38 21:04:53 01:18:15
necesito dividir el Rango_Tiempo por Ctd, para obtener cada cuantos segundos ingreso una persona

Esperando vuestra ayuda....

Salu2:p:cool:

BlueSteel 25-02-2011 22:01:09

Obtener diferencia de fechas en Segundos
 
Estimados, encontre la siguiente funcion de SQL Server que me permite obtener la diferencia entre 2 fechas y el resultado me lo arroja segun lo que necesite: año, meses, dias, horas, minutos o segundos

Como yo necesito saber los segundos que transcurren entre el primer ingreso al Estadio y el Ultimo, y luego sacar cada cuantos segundos me ingresaba una persona, me sirvio...

Aqui las sentencias

Código SQL [-]
declare @FechaIngreso datetime
declare @FechaEgreso datetime

select @FechaIngreso = '19981231 15:15:15'
select @FechaEgreso = '20021005 10:10:01'
Select

DATEDIFF(yy, @FechaIngreso, @FechaEgreso) AS Años,
DATEDIFF(mm, @FechaIngreso, @FechaEgreso) AS Meses,
DATEDIFF(dd, @FechaIngreso, @FechaEgreso) AS Dias,
DATEDIFF(mi, @FechaIngreso, @FechaEgreso) AS Minutos,
DATEDIFF(ss, @FechaIngreso, @FechaEgreso) AS Segundos

y para mis consultas, las cree de la siguiente manera

Código SQL [-]
Select Ctl_Id as Puerta, 
Count(Eve_Id) as Ingresos,
Min(Convert(Varchar(8),Ing_Fecha, 108)) as Primer_Ingreso,
Max(Convert(Varchar(8),Ing_Fecha, 108)) as Ultimo_Ingreso,
Convert(Varchar(8),(Max(Ing_Fecha)-Min(Ing_Fecha)),108) as Rango_Tiempo,
DateDiff(s, Min(Ing_Fecha), Max(Ing_Fecha)) as Segundos, 
DateDiff(s, Min(Ing_Fecha), Max(Ing_Fecha))/Count(Eve_id) as Ingreso_Cada_XSeg
From
Vista_Ingreso
Where Eve_Id=8
Group By Ctl_Id


bueno, la consulta anterior me arroja los siguientes resultados

Cita:

3 532 19:40:45 21:16:45 01:36:00 5760 10
1 272 19:40:22 21:00:17 01:19:55 4795 17
5 144 19:46:38 21:04:53 01:18:15 4695 32

la linea 1 me dice lo siguiente:

Puerta de Ingreso : 3
Personas que Ingresaron por esa puerta : 532
Primer Ingreso : 19:40:45
Ultimo Ingreso : 21:16:45
Rango de Tiempo : 01:36:00 (1 hora y 36 minutos)
Rango en Segundos : 5760
Ingreso 1 persona cada :10 segundos


bueno, espero que les sirva esto a alguien.. ahh.. pero lo que no encontre es como transformar un dato de tipo datetime a segundos... pero igual seguire buscando

salu2:p:cool:


La franja horaria es GMT +2. Ahora son las 07:36:37.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi