Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-02-2011
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
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
__________________
BlueSteel
Responder Con Cita
  #2  
Antiguo 09-02-2011
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
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
__________________
self.free;
Responder Con Cita
  #3  
Antiguo 10-02-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 14-02-2011
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Estimados...

Estoy revisando el procedimiento.... (aunque poco lo entiendo)

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
__________________
BlueSteel
Responder Con Cita
  #5  
Antiguo 24-02-2011
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
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
__________________
BlueSteel
Responder Con Cita
  #6  
Antiguo 25-02-2011
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
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
__________________
BlueSteel

Última edición por BlueSteel fecha: 25-02-2011 a las 22:10:34.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
mostrar conteo segundo a segundo douglas OOP 1 18-11-2007 12:20:06
Estadística mensajes clubdelphi Casimiro Notevi La Taberna 13 27-07-2007 11:10:35
Algo para la estadística egostar Noticias 7 30-03-2007 19:41:56
barras de estadistica alfil123 Gráficos 1 18-12-2005 11:37:20
Estadistica programas utilizados Descendents Varios 0 13-02-2004 11:22:27


La franja horaria es GMT +2. Ahora son las 01:58:16.


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
Copyright 1996-2007 Club Delphi