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 23-11-2008
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Como acelerar búsqueda de valores extremos?

Pues eso, lo del encabezamiento

Tengo una tabla con cuatro campos (Clave, Fecha, Hora y Valor) y necesito sacar el máximo, el mínimo y las horas en que se producen de un día determinado.

Hasta ahora lo hago en dos pasos para cada valor (por ejemplo, para el 23-10-2008):
1º - Consulto los valores extremos
Código SQL [-]
SELECT MIN(valor) AS minimo, MAX(valor) AS minimo
  FROM tabla
 WHERE fecha="2008-10-23"
2º - Consulto las fechas en que se producen los valores extremos
Código SQL [-]
SELECT hora
  FROM tabla
 WHERE fecha="2008-10-23"
   AND valor=MINIMO
SELECT hora
  FROM tabla
 WHERE fecha="2008-10-23"
   AND valor=MAXIMO
La cosa funciona, pero da la impresión de quedarse "colgado" el sistema (osea que tarda demasiado), por eso mi pregunta ¿Hay alguna otra forma para acelerar el resultado?

Gracias de antemano
Salvica

Última edición por salvica fecha: 23-11-2008 a las 18:03:16.
Responder Con Cita
  #2  
Antiguo 23-11-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola, prueba de no usar las comillas en la comparacion de 'fecha'
Responder Con Cita
  #3  
Antiguo 23-11-2008
Avatar de RUBICON
RUBICON RUBICON is offline
Registrado
 
Registrado: dic 2004
Posts: 7
Poder: 0
RUBICON Va por buen camino
Si son tablas con mucha informacion, una solucion es crear indices y realizar las busquedas implementando los mismos.
Responder Con Cita
  #4  
Antiguo 23-11-2008
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Cita:
Empezado por coso Ver Mensaje
Hola, prueba de no usar las comillas en la comparacion de 'fecha'
Gracias coso, se me olvidó poner en el hilo que utilizo MySql y los ejemplos que he visto vienen así (hasta la fecha no he tenido problemas)

Cita:
Empezado por RUBICON Ver Mensaje
Si son tablas con mucha informacion, una solucion es crear indices y realizar las busquedas implementando los mismos.
Hola COSO. Efectivamente, las tablas tienen mucha información.

De todas formas creo que lo he solucionado revisando este hilo, donde poliburro trata algo parecido

Lo dicho, gracias a todos y si no hay más aportaciones doy el hilo por cerrado
Salvica
Responder Con Cita
  #5  
Antiguo 24-11-2008
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
Código SQL [-]
Select Tabla.* 
  FROM tabla Tabla
  Inner join (
                     SELECT str_to_date("2008-10-23", '%Y-%m-%d') Fecha,
                                    MIN(valor) AS minimo, 
                                    MAX(valor) AS minimo
                        FROM tabla
                     WHERE fecha="2008-10-23"
                 ) Filtro
            On Tabla.Fecha = filtro.Fecha And
                  ( Tabla.Valor = filtro.Máximo Or Tabla.Valor = Filtro.Minimo)
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #6  
Antiguo 25-11-2008
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Hola poliburro, he intentado adaptar tu consulta y, o no he sabido hacerla , o el resultado no es el que me esperaba (saca todo revuelto)

En realidad necesito un consulta que me devuelva el valor máximo (o el mínimo), o mejor los dos , con las horas en que se producen dichos eventos (puede ser una o varias, depende de si se repite al cabo del tiempo)

Según el hilo tuyo que puse en el mensaje anterior, hice lo siguiente:
Código SQL [-]
         SQL.Add( 'CREATE OR REPLACE VIEW z_view_extrema AS' );
         SQL.Add( 'SELECT *' );
         SQL.Add( '  FROM z_view_media1min' );
         SQL.Add( ' WHERE (valor=(SELECT MIN(valor) AS minima' );
         SQL.Add( '                       FROM z_view_media1min' );
         SQL.Add( '                  )' );
         SQL.Add( '       )' );
         SQL.Add( ' ORDER BY clave' );
z_view_media1min es una vista en la que ya tengo almacenados los valores de un día determinado (unos 8600 más o menos) y consta (al igual que las tablas padres) de Clave, Fecha, Hora y Valor

La cuestión es que cuando le pido los valores extremos (máximo y mínimo) parece que "se eterniza" (o por lo menos esa es mi impresión), por eso mi pregunta.

De todas formas, muy buenas tus explicaciones en otros hilos.
Gracias
Salvica
Responder Con Cita
  #7  
Antiguo 26-11-2008
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
Cita:
Empezado por salvica Ver Mensaje
Hola poliburro, he intentado adaptar tu consulta y, o no he sabido hacerla , o el resultado no es el que me esperaba (saca todo revuelto)

En realidad necesito un consulta que me devuelva el valor máximo (o el mínimo), o mejor los dos , con las horas en que se producen dichos eventos (puede ser una o varias, depende de si se repite al cabo del tiempo)


Ok, entonces igual te conviene indexar el campo valor y generar la vista de esta manera:

Código SQL [-]
 
CREATE OR REPLACE VIEW z_view_extrema AS
  SELECT media.*
     FROM z_view_media1min media
      inner join (
                        SELECT MIN(valor) AS minima, Max(valor) Maximo
                       FROM z_view_media1min
                     ) Filtro
                On media.Valor = filtro.Maximo Or 
                      media.Valor = filtro.Minimo 
 ORDER BY clave


de esta manera obtienes todos los registros en media cuyo valor es igual al máximo o igual al mínimo. Indexar el campo valor te ayudará a mejorar la velocidad de la consulta.


Saludos
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #8  
Antiguo 26-11-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
hola, no se bien bien si es lo que buscas, pero

Código SQL [-]
select horas from tabla where (valor = (select max(valor) from tabla) or valor = (select min(valor) from tabla)

no te daria el resultado? (quiza lo entendi mal)
Responder Con Cita
  #9  
Antiguo 26-11-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Sobre el rendimiento, no estoy seguro...pero me da la impresion que si pones date como una string, el servidor sql la pasa a datetime...quiza si sacases las comillas (ya te digo que no estoy seguro, no conozco a fondo MySQL)
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
Conexión de 2 máquinas a 1 que tiene 2 tarjetas de red y que se vean los extremos Lester Redes 1 18-07-2007 15:45:45
Truco: Cómo acelerar Beryl en Ubuntu Casimiro Notevi La Taberna 16 21-03-2007 21:53:40
Problemas Acelerar PHP HomeCinema PHP 1 09-02-2007 11:42:04
como jalar los tomar y jalar valores de una tabla de un campo de Busqueda en Delphi Mone Conexión con bases de datos 6 15-11-2005 19:50:46
Como acelerar el trabajo DBF manuelpr Conexión con bases de datos 3 29-03-2005 19:52:11


La franja horaria es GMT +2. Ahora son las 14:37:06.


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