Access - SQL para contar 1 entre fechas(horas) consecutivas

 
Vista:

SQL para contar 1 entre fechas(horas) consecutivas

Publicado por Eduardo (1 intervención) el 30/04/2007 23:07:51
Hola a todos, tengo la tabla1 y con ella deseo obtener la tabla2 contando los unos que existen para horas consecutivas (30 minutos):

Tabla1 Inicial
Desde Hasta Cantidad
01-04-2007 1:00:00 01-04-2007 1:00:00 1
01-04-2007 2:00:00 01-04-2007 2:00:00 1
01-04-2007 2:30:00 01-04-2007 2:30:00 1
01-04-2007 3:00:00 01-04-2007 3:00:00 1
01-04-2007 23:30:00 01-04-2007 23:30:00 1
02-04-2007 0:00:00 02-04-2007 0:00:00 1
02-04-2007 0:30:00 02-04-2007 0:30:00 1
02-04-2007 1:00:00 02-04-2007 1:00:00 1
02-04-2007 3:00:00 02-04-2007 3:00:00 1
02-04-2007 3:30:00 02-04-2007 3:30:00 1

Tabla2 resultado
"Desde" ,"Hasta" ,"Cantidad de ceros"
1/4/2007 01:00:00 ,1/4/2007 01:00:00 , 1.00
1/4/2007 02:00:00 ,1/4/2007 03:00:00 ,3.00
1/4/2007 23:30:00 ,2/4/2007 01:00:00 ,4.00
2/4/2007 03:00:00 ,2/4/2007 03:30:00 ,2.00

Como puedo realizar lo anterior con una consulta en SQL y contar los 1 para fechas-Horas consecutivas de 30 minutos. Sabe alguien como lograr esto?
Muy agradecido por cualquier ayuda.
Saluda
Eduardo
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
Imágen de perfil de Alejandro

Consulta para contar registros consecutivos en intervalos de tiempo

Publicado por Alejandro (4142 intervenciones) el 09/08/2023 22:25:48
Para lograr esto en Access, puedes utilizar una consulta SQL que calcule los intervalos de tiempo consecutivos de 30 minutos y cuente los registros correspondientes. Aquí tienes cómo hacerlo:

1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT MIN([Desde]) AS Desde,
       MAX([Hasta]) AS Hasta,
       COUNT(*) AS [Cantidad de ceros]
FROM (
    SELECT t1.*,
           (SELECT COUNT(*)
            FROM Tabla1 t2
            WHERE t2.[Desde] <= t1.[Desde] AND t2.[Cantidad] = 1) AS Grupo
    FROM Tabla1 t1
    WHERE t1.[Cantidad] = 1
) AS Subconsulta
GROUP BY Grupo, DateAdd("n", -30 * Grupo, [Desde])
ORDER BY Desde;

Explicación:

1. La subconsulta interior crea una columna llamada "Grupo" que asigna un número de grupo a cada registro. Los registros consecutivos con "Cantidad" igual a 1 se agruparán en el mismo grupo. Esto se logra mediante una subconsulta correlacionada que cuenta los registros anteriores con "Cantidad" igual a 1.

2. La función `DateAdd("n", -30 * Grupo, [Desde])` calcula la fecha y hora del inicio del intervalo de 30 minutos para cada registro, teniendo en cuenta el grupo al que pertenece. Esto permite agrupar registros consecutivos en intervalos de 30 minutos.

3. La consulta principal agrupa los registros por el "Grupo" y el inicio del intervalo de 30 minutos. Utiliza las funciones de agregación `MIN` y `MAX` para obtener el rango de fechas y horas para cada intervalo.

4. Finalmente, la consulta cuenta los registros en cada grupo e intervalo de tiempo usando la función `COUNT`.

Ten en cuenta que esta consulta asume que los registros en la Tabla1 están ordenados por fecha y hora. Asegúrate de ajustar los nombres de las tablas y los campos según tu base de datos.
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