Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta complicada (por lo menos para mi) (https://www.clubdelphi.com/foros/showthread.php?t=61480)

salvica 09-11-2008 17:07:21

Consulta complicada (por lo menos para mi)
 
Hola a tod@s :)

Tengo una tabla declarada como:
Código SQL [-]
- =======
- clave es la fecha y hora del registro en formato YYYYMMDDHHnnSS
- fecha es la fecha del registro (año, mes y día)
- hora  es la hora del registro  (horas, minutos y segundos)
- =======
   CREATE TABLE IF NOT EXISTS temporal (
          clave    char(14) collate latin1_spanish_ci NOT NULL,
          fecha    date     NOT NULL,
          hora     time     NOT NULL,
          valor    float    NOT NULL,
          PRIMARY KEY  (clave)
   ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci;
Bien, lo que pretendo es sacar la media de los DIEZ minutos previos a una hora del día, teniendo en cuenta que;
- las 00 horas comprenden de las 23:50:00 del día anterior a las 00:00:00 del día actual
- las XX horas comprenden de las (XX-1):50:00 a las XX:00:00 de la hora

¿podeis decirme como puedo hacerlo de "una tacada"? ;) :rolleyes:
hasta ahora lo máximo a lo que llego es a hacer dos o tres consultas para sacar valores intermedios

Gracias adelantadas
Salvica

Nota: Delphi-7, Zeos y MySql-5

salvica 09-11-2008 17:47:36

Se me olvidaba
 
Se me olvidaba añadir que previamente hice esto (para sacar los datos cada DIEZ segundos), pero no sé como sacar las medias ya que si agrupo me mezcla las horas (hacerlo ya se que es con AVG)
Código SQL [-]
SELECT tactual.fecha, tactual.hora, tactual.valor
  FROM tseca AS tactual
 WHERE (tactual.fecha="2008-10-12" AND DATE_FORMAT(hora, "%H:%i")>"23:50")
    OR (tactual.fecha="2008-10-13" AND DATE_FORMAT(hora, "%i:%s")="00:00")
    OR (tactual.fecha="2008-10-13" AND DATE_FORMAT(hora, "%i")>"50" AND DATE_FORMAT(hora, "%i")<="59")
    OR (tactual.fecha="2008-10-14" AND DATE_FORMAT(hora, "%H:%i:%s")="00:00:00")
-- GROUP BY DATE_FORMAT(hora, "%H:%i")
 ORDER BY clave ASC
Saludos y repito, gracias adelantadas
Salvica

gmontes 10-11-2008 22:51:24

ok, se supone que fecha es el dia a buscar

hora es por ejemplo las 14:00:00 y

hora2 seria = (hora - (10/1440)) , que nos da la hora elegida menos 10 minutos.

restar 20/1440 ala hora x seria restarle 20 minutos



Código SQL [-]
select avg(valor) from tseca  where fecha = :fecha and (hora <= :hora and hora >= :hora2 )


:D

salvica 14-11-2008 19:41:42

hola gmontes, gracias por responder.
Perdona la demora pero no he podido entrar antes, motivos de trabajo ;)

La consulta no me sirve, ya que tendría que meterme en un bucle para leer los datos de cada día y los de la última hora del día anterior :( (25 entradas/salidas diarias)

Lo solucioné con una vista (error mio, pensaba que mysql-5 no las soportaba :mad:) en la que con un case pongo todos los datos en el mismo minuto y al final los agrupo por ese campo
Código SQL [-]
CREATE OR REPLACE VIEW z_view_tmedia10min AS
SELECT clave, fecha, hora, 
       DATE_FORMAT(hora, "%H") as sHora,
      (CASE WHEN MINUTE(hora) BETWEEN  0 AND  9 then  0
            WHEN MINUTE(hora) BETWEEN 10 AND 19 then 10
            WHEN MINUTE(hora) BETWEEN 20 AND 29 then 20
            WHEN MINUTE(hora) BETWEEN 30 AND 39 then 30
            WHEN MINUTE(hora) BETWEEN 40 AND 49 then 40
                                                else 50
       END) AS iMinuto,
       ROUND(AVG(valor), 1) AS tmedia10min
  FROM tseca
 WHERE (fecha="2008-10-29" AND HOUR(hora)=23)
    OR (fecha="2008-10-30")
    OR (fecha="2008-10-31" AND HOUR(hora)= 0)
 GROUP BY fecha, sHora, iMinuto
 ORDER BY clave;
De esta forma me vale para sacar los 10 minutoas anteriores (iMinuto=50) y los de los 10 minutos siguientes (iMinuto=0)

Saludos
Salvica


La franja horaria es GMT +2. Ahora son las 04:16:59.

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