PDA

Ver la Versión Completa : De nuevo con las consultas


salvica
15-12-2008, 01:31:27
Hola a tod@s, de nuevo complicándome la vida ;)

Introducción:
Tengo una tabla con los siguientes campos:
- CLAVE --> la clave ;)
- FECHA --> la fecha del registro (año/mes/dia)
- HORA ---> la hora del mismo (hora/minutos/segundos)
(MySql, Zeos y D7)

Problema:
Necesito sacar la suma de los valores de un intervalo de tiempo (por ejemplo 5 minutos) para luego hacer otros cálculos, osea:

HORA_ORIGEN VALOR DESDE HASTA DEBE SACAR
=========== ====== ======== ======== ==========
00:00:00 0 00:00:00 00:05:00 0
00:01:00 0 00:01:00 00:06:00 100
00:02:00 0 00:02:00 00:07:00 190
00:03:00 0 00:03:00 00:08:00 240
00:04:00 0 00:04:00 00:09:00 270
00:05:00 0 00:05:00 00:10:00 270
00:06:00 100 00:06:00 00:11:00 270
00:07:00 90 00:07:00 00:12:00 180
00:08:00 50 00:08:00 00:13:00 90
00:09:00 30 00:09:00 00:14:00 40
00:10:00 0 00:10:00 00:15:00 30
00:11:00 0 00:11:00 00:16:00 0
00:12:00 10 00:12:00 00:17:00 30
00:13:00 0 00:13:00 00:18:00 20
00:14:00 0 00:14:00 00:19:00 0
00:15:00 20 00:15:00 00:20:00 20
... siguen ceros

Para ello hago (bueno, quisiera hacer, porque saca datos donde deben haber cero)
1º - Saco todos los registros de la tabla (select principal)
2º - Para cada hora anterior, la suma de aquellos comprendidos entre esa hora y el intervalo (todo en minutos)

SELECT clave, fecha, hora,
(SELECT SUM(valor)
FROM tabla AS p
WHERE (MINUTE(p.hora) BETWEEN MINUTE(origen.hora) AND (MINUTE(origen.hora)+5))
) AS pluvio
FROM tabla AS origen

¿Donde estoy metiendo "la pataza"?

Gracias por la ayuda
Salvica

Lepe
15-12-2008, 12:38:12
¿podría ser debido a MINUTE?
No conozco esa función, pero todo indica que pillará los minutos sin tener en cuenta la hora ¿no?

Una opción podría ser multiplicar la hora por 60 y sumar los minutos en el sql de esa forma tenemos un número integer que represente la hora y minutos:

veremos si me explico.... (todo igual excepto el where)

SELECT clave, fecha, hora,
(SELECT SUM(valor)
FROM tabla AS p
WHERE (
(HOUR(p.hora) *60) + MINUTE(p.hora)
between (HOUR(origen.hora) *60) + MINUTE(origen.hora)
and (HOUR(origen.hora) *60) + MINUTE(origen.hora) + 5)
) AS pluvio
FROM tabla AS origen

Saludos y suerte

salvica
15-12-2008, 13:22:20
¿podría ser debido a MINUTE?
No conozco esa función, pero todo indica que pillará los minutos sin tener en cuenta la hora ¿no?

Una opción podría ser multiplicar la hora por 60 y sumar los minutos en el sql de esa forma tenemos un número integer que represente la hora y minutos:

veremos si me explico.... (todo igual excepto el where)
Código SQL [-] (http://www.clubdelphi.com/foros/#)SELECT clave, fecha, hora, (SELECT SUM(valor) FROM tabla AS p WHERE ( (HOUR(p.hora) *60) + MINUTE(p.hora) between (HOUR(origen.hora) *60) + MINUTE(origen.hora) and (HOUR(origen.hora) *60) + MINUTE(origen.hora) + 5) ) AS pluvio FROM tabla AS origen


Saludos y suerte
:D:D:D:D:D Gracias Lepe, exactamente ese era el problema.

No se porqué estaba esperando los minutos del día :mad::mad:, en vez de los minutos de la hora que es lo que da.

Salvica