Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-05-2007
VRO VRO is offline
Miembro
 
Registrado: abr 2004
Posts: 230
Poder: 20
VRO Va por buen camino
Wink Trabada en Consulta MySql

Hola , buenos días, estoy trabajando en una consulta de Mysql y me he quedado atascada porque no me salen los resultados exactos que deseo obtener.

Vereis lo que necesito conseguir es: Sacar la última lectura del día anterior al que estamos para todos los contadoresque tengo en mi base de datos.

La consulta que yo he realizado es la siguiente:

Código SQL [-]
SELECT PUERTOS.TAG,CONTADORES.VALOR,CONTADORES.FECHA
FROM CONTADORES,PUERTOS WHERE DISPOSITIVO='Contador' and
CONTADORES.NUMPUERTO=PUERTOS.NUMPUERTO AND 
CONTADORES.IDEQUIPO=PUERTOS.IDEQUIPO AND 
(FECHA>='2007-05-15 00:00:00' AND  FECHA<'2007-05-16 00:00:00')
GROUP BY TAG ORDER BY FECHA DESC

El campo fecha contiene la fecha y la hora.

Lo que me muestra esta consulta son la primera lectura del día anterior al actual para todos los contadores y yo necesitaría sacar la última para cada uno de ellos.

¿Cómo lo podría hacer?.

Gracias por todo.

P.D: Espero haberme expresado con claridad. Hasta pronto

Última edición por dec fecha: 17-05-2007 a las 02:16:38.
Responder Con Cita
  #2  
Antiguo 16-05-2007
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.409
Poder: 22
fjcg02 Va camino a la fama
Si ordenas descendentemente, deberás usar FIRST(), si ordenas ascendentemente, LAST()

Código SQL [-]
SELECT PUERTOS.TAG,LAST(CONTADORES.FECHA), LAST(CONTADORES.VALOR)
FROM CONTADORES,PUERTOS 
WHERE 
DISPOSITIVO='Contador' and
CONTADORES.NUMPUERTO=PUERTOS.NUMPUERTO AND 
CONTADORES.IDEQUIPO=PUERTOS.IDEQUIPO AND 
(FECHA>='2007-05-15 00:00:00' AND  FECHA<'2007-05-16 00:00:00')
GROUP BY TAG 
ORDER BY FECHA
o

Código SQL [-]
SELECT PUERTOS.TAG,FIRST(CONTADORES.FECHA), FIRST(CONTADORES.VALOR)
FROM CONTADORES,PUERTOS 
WHERE 
DISPOSITIVO='Contador' and
CONTADORES.NUMPUERTO=PUERTOS.NUMPUERTO AND 
CONTADORES.IDEQUIPO=PUERTOS.IDEQUIPO AND 
(FECHA>='2007-05-15 00:00:00' AND  FECHA<'2007-05-16 00:00:00')
GROUP BY TAG 
ORDER BY FECHA DESC

Creo que te falta la función de agregado.

También podrías parametrizar la consulta para enviarle una fecha como parámetro y calcular la fecha del día anterior, pero eso depende del motro de BBDD, y yo de MySQL no domino bastante ( ni tengo muchas ganas de mirar, ciertamente ).

Suerte y saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #3  
Antiguo 17-05-2007
VRO VRO is offline
Miembro
 
Registrado: abr 2004
Posts: 230
Poder: 20
VRO Va por buen camino
Talking Trabada con consulta .-. Solución

Gracias por responderme , la verdad, es que en Mysql no se puede usar el frist o last ó por lo menos a mi me da error igual es quehe ehcho alguna cagadilla por ahí, pero tu consulta e dio una idea queme llevo a encontrar la solución.

Solución:

Código:
SELECT puertos.tag,contadores.valor,max(fecha)as fecha 
FROM CONTADORES,PUERTOS WHERE DISPOSITIVO='Contador' 
and CONTADORES.NUMPUERTO=PUERTOS.NUMPUERTO 
AND CONTADORES.IDEQUIPO=PUERTOS.IDEQUIPO 
AND (FECHA>='2007-05-14 00:00:00' AND  FECHA<'2007-05-15 00:00:00')
GROUP BY TAG  
HAVING max(fecha)< '2007-05-15 00:00:00' 
ORDER BY tag asc
Si no hubiese sido por tu respuest no se me hubiese ocurrido.

Probaré a sacar la anterior poniendo las fechas con parámetros .

Muchas gracias y buen día.
Responder Con Cita
  #4  
Antiguo 17-05-2007
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.409
Poder: 22
fjcg02 Va camino a la fama
Realmente el problema no creo que sea del first ni del last, sino que no incluyes los campos que no tengan función de agrupado en el group by

Código SQL [-]
SELECT PUERTOS.TAG,CONTADORES.VALOR,CONTADORES.FECHA
FROM CONTADORES,PUERTOS WHERE DISPOSITIVO='Contador' and
CONTADORES.NUMPUERTO=PUERTOS.NUMPUERTO AND 
CONTADORES.IDEQUIPO=PUERTOS.IDEQUIPO AND 
(FECHA>='2007-05-15 00:00:00' AND  FECHA<'2007-05-16 00:00:00')
GROUP BY TAG ORDER BY FECHA DESC

Esta era tu consulta inicial. Seguramente te dará error porque haces un group by y no hay funciones de agrupado ( first, last, sum, count, ...). Además, todos los campos que pongas que no tengan función, deberán estar en el group by.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #5  
Antiguo 17-05-2007
VRO VRO is offline
Miembro
 
Registrado: abr 2004
Posts: 230
Poder: 20
VRO Va por buen camino
trabada con consulta en mysql.-. solución

Cita:
Empezado por VRO
Gracias por responderme , la verdad, es que en Mysql no se puede usar el frist o last ó por lo menos a mi me da error igual es quehe ehcho alguna cagadilla por ahí, pero tu consulta e dio una idea queme llevo a encontrar la solución.

Solución:

Código:
SELECT puertos.tag,max(contadores.valor),max(fecha)as fecha 
FROM CONTADORES,PUERTOS WHERE DISPOSITIVO='Contador' 
and CONTADORES.NUMPUERTO=PUERTOS.NUMPUERTO 
AND CONTADORES.IDEQUIPO=PUERTOS.IDEQUIPO 
AND (FECHA>='2007-05-14 00:00:00' AND  FECHA<'2007-05-15 00:00:00')
GROUP BY TAG  
HAVING max(fecha)< '2007-05-15 00:00:00' 
ORDER BY tag asc
Si no hubiese sido por tu respuest no se me hubiese ocurrido.

Probaré a sacar la anterior poniendo las fechas con parámetros .

Muchas gracias y buen día.
ahora si que antes se me había olvidado poner max(contadores.valor)
Responder Con Cita
  #6  
Antiguo 17-05-2007
VRO VRO is offline
Miembro
 
Registrado: abr 2004
Posts: 230
Poder: 20
VRO Va por buen camino
Sigo trabada en funcion

La verdad es que poniendo max(contadores.valor) ó sin poner el max no me sale el resultado del todo bien , lo que yo pretendo es que me salga el valor correspondiente a la fecha resultante de la consulta , si pongo el max me sale siempre la máxima y no tiene porque corresponder a esa fecha.

Si lo hago como tu dices, poniendo todos los campos que no tiene función en el group by, es decir, en este caso sería el campo valor, me aparecerán todos los valores de ese contador entre las 2 fecha indicadas y no pretendo eso, sino , que me salga sólo un resultado por cada contador, con su valor correspondiente para la última fecha del día anterior.

Me haría falta algo como tu dices el first ó el last, pero cuando lo pongo en la consulta tal que así:

Código:
SELECT puertos.tag,first(contadores.valor),max(fecha)as mfecha 
FROM CONTADORES,PUERTOS 
WHERE DISPOSITIVO='Contador' and CONTADORES.NUMPUERTO=PUERTOS.NUMPUERTO 
AND CONTADORES.IDEQUIPO=PUERTOS.IDEQUIPO
AND (FECHA>='2007-05-13 00:00:00' AND  FECHA<'2007-05-14 00:00:00')
GROUP BY TAG
HAVING max(fecha)< '2007-05-14 00:00:00' 
ORDER BY tag asc,FECHA DESC
me dice error 1064 near contadores.valor, si no le pongo no me da error pero no es exacto el resultado que obtengo para todos los casos.

Plissssssss si se te ocurre algo más comantamelo igual es que no te he entendido lo que me intentas explicar, yo seguiré estrujandome el coco.


Gracias por tu apoyo y ayuda...
Responder Con Cita
  #7  
Antiguo 17-05-2007
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.409
Poder: 22
fjcg02 Va camino a la fama
En la respuesta nº 2 tienes la solución escrita de dos maneras diferentes.

Saludos
Ah, pero no mezcles el orden . Con DESC, first, sin DESC, last.
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #8  
Antiguo 18-05-2007
VRO VRO is offline
Miembro
 
Registrado: abr 2004
Posts: 230
Poder: 20
VRO Va por buen camino
Wink Gracias

Gracias por todo, pero con Mysql no puedo utilizar el first ni el last.

Seguiré investigando
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
realizar consulta mysql fernando1973 SQL 4 03-05-2007 14:18:15
duda con una consulta LIKE en MySQL enecumene MySQL 6 06-02-2007 21:06:46
Consulta dificil en mysql y sql Arturo SQL 1 08-11-2006 13:39:41
Consulta Like Mysql '%'+ :parametro + '%' CarlaOnti MySQL 3 30-01-2006 12:46:13
consulta a mysql jfontane PHP 2 10-06-2003 19:11:57


La franja horaria es GMT +2. Ahora son las 16:17:28.


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