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 27-08-2004
VRO VRO is offline
Miembro
 
Registrado: abr 2004
Posts: 230
Poder: 21
VRO Va por buen camino
Consulta Con Group By

HOLA, ¿QUE TAL?,

EL PROGRAMA QUE REALIZO CONSTA DE 2 TABLAS QUE INTERVIENEN EN LA CONSULTA PROBLEMA Y QUE SON: LECTURAS Y CONTADORES, LO QUE YO PRETENDO CONSEGUIR ES SACAR LOS DATOS QUE PONGO EN EL SELECT QUE ESTÁN ASOCIADOS AL DBGRID Y QUE ME LOS AGRUPE POR CONTADORES PARA QUEDARME CON LA MAYOR LECTURA PARA ESOS CONTADORES, LO QUE DESPUES CONSIGO HACIENDO QUERY.FIRST, PARA ELLO HAGO LO SIGUIENTE:

QUERY.CLOSE;
QUERY.SQL.TEXT:='select contadores.numero,nombre,poblacion,patron as patron1,lectura,fecha,consumo from contadores,lecturas where contadores.numero=lecturas.numero and fecha>='''+ fechaant+''' and fecha<='''+fechasig+'''and patron=1 group by contadores.numero';
QUERY.OPEN;
QUERY.FIRST;

EL ERROR QUE DA ES: INVALID COLUMN REFERENCE , ME HE DADO CUENTA QUE PARA AGRUPAR SE DEBE HACER POR TODOS LOS CAMPOS QUE ESTAS SELECCIONANDO, CREO, PERO YO SÓLO QUIERO AGRUPAR POR CONTADORES.NUMERO

¿SI ALGUIEN ME PUEDE AYUDAR Ó DECIR COMO PODER HACERLA?, YA QUE ESTA FORMA ES CORRECTA EN MYSQL PERO NO EN SQL QUE ES LO QUE UTILIZA INTERBASE.

MUCHAS GRACIAS.
Responder Con Cita
  #2  
Antiguo 27-08-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Hola

Ante todo, con 24 mensajes que llevas, va siendo hora de que te leas la Guía de Estilo (ver firma). En ella verás de que se pide a los usuarios que no escriban en mayúsculas ya que, en internet eso significa gritar, chillar, hablar a voces,... dilo como prefieras. Por favor, usa las minúsculas, te cuesta lo mismo
También decirte que existen las etiquetas [ delphi ] y [ /delphi ] (sin espacios) para poner código. Mira el primer mensaje de cada foro que allí se explica más detenidamente.

Respecto a problema.....

El SQL es un lenguaje el cual es interpretado por los motores de bases de datos. Pueden o no seguir el estándar que hay, pueden o no ampliarlo, pero MySQL, como SGBD que es, usa/interpreta el SQL al igual que otros SGBD.

Dicho esto, sólo decirte que, en un GROUP BY han de ir TODOS los campos de la cláusula SELECT menos los agregados (de hecho, tiene su sentido si lo miras friamente)

A parte de esto, para poderte ayudar a solucionarlo de otra manera, mira de explicarnos mejor que es lo que quieres conseguir, porque yo, al menos con los datos que das, no se exactamente lo que quieres
Responder Con Cita
  #3  
Antiguo 27-08-2004
Sirkius Sirkius is offline
Miembro
 
Registrado: jun 2004
Posts: 83
Poder: 20
Sirkius Va por buen camino
MySQL te dice donde está el error y te informa muy bien!! Usa un programa como Mysql Front o similar y mete unas fechas de prueba. Verás como te dice por donde anda y así es muy facil de solucionar
__________________
SIN FIRMA :P
Responder Con Cita
  #4  
Antiguo 27-08-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Sirkius
MySQL te dice donde está el error y te informa muy bien!!
Este... Me parece que el problema de VRO es con Interbase, no con MySql.

// Saludos
Responder Con Cita
  #5  
Antiguo 27-08-2004
Sirkius Sirkius is offline
Miembro
 
Registrado: jun 2004
Posts: 83
Poder: 20
Sirkius Va por buen camino
Cita:
Empezado por roman
Este... Me parece que el problema de VRO es con Interbase, no con MySql.

// Saludos
:P, ups... como cadetill hablaba de MySQL ni acabé de mirar el primer mensaje...
__________________
SIN FIRMA :P
Responder Con Cita
  #6  
Antiguo 30-08-2004
VRO VRO is offline
Miembro
 
Registrado: abr 2004
Posts: 230
Poder: 21
VRO Va por buen camino
Gracias por vuestra ayuda.
Responder Con Cita
  #7  
Antiguo 30-08-2004
VRO VRO is offline
Miembro
 
Registrado: abr 2004
Posts: 230
Poder: 21
VRO Va por buen camino
Realmente el problema es:

Para realizar mi consulta lo que necesito es que no se pueda agrupar por todos los campos expuestos en la selección, ya que el resultado que obtengo no es el esperado, pero como no se puede hacer así, haber si vosotros/as podríais decirme como hacer la siguiente consulta:

Tengo que sacar todos los datos de los contadores con sus lecturas y su consumo comprendidos entre la primera quincena de cualquier mes, para el día más alto de ese mes en esa quincenay ese resultado para todos los contadores posibles que cumplan esas condiciones.
Las tablas utilizadas son 2 contadores y lecturas,
y la consulta que yo hice os la vuelvo a especificar:
Código Delphi [-]
query.close;
query.sql.text:='select contadores.numero,nombre,
poblacion,patron as patron1,lectura,fecha,
consumo from contadores,lecturas where contadores.numero=lecturas.numero 
and  fecha>='''+ fechaant+''' and fecha<='''+fechasig+'''
and patron=1 group by contadores.numero order by fecha desc';
query.open;
Aquí se que mi problema, como ya os he comentado antes, es que no puedo aqrupar por sólo un campo de la seleccion sino que lo tengo que hacer por todos.

Es un poco lioso, ya lo se, y al poder ser necesito resolverlo en una sólo consulta. Si alguien sabe como hacer esa consulta.......Gracias

Última edición por VRO fecha: 30-08-2004 a las 17:41:16.
Responder Con Cita
  #8  
Antiguo 30-08-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Hola VRO

Podrías mirar de editar tu mensaje y poner en varias lineas las sentencia SQL para así evitar el scroll horizontal?

Por otro lado, podrías poner la estructura de las tablas y la relación entre ellas?
Responder Con Cita
  #9  
Antiguo 30-08-2004
VRO VRO is offline
Miembro
 
Registrado: abr 2004
Posts: 230
Poder: 21
VRO Va por buen camino
la tabla contadores tiene como campos: numero, nombre,poblacion, patron, depende,.... el resto de los campos no son relevantes.
La tabla lecturas tiene como campos:numero,lectura,fecha,consumo....

La relacion es el campo numero, que es el numero de contador.
Responder Con Cita
  #10  
Antiguo 30-08-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Código SQL [-]
select
  c.numero, c.nombre, c.poblacion, c.patron, l.lectura, l.fecha, l.consumo
from
  contadores c
    inner join lecturas l on (l.numero = c.numero)
where
  fecha between FechaInicial and FechaFinal
order by
  fecha desc
Esta sentencia SQL te devolverá TODOS los contadores con TODAS sus lecturas y el consumo de CADA UNA de estas lecturas ordenado por fecha de forma decreciente (aunque creo que lo lógico sería por Numero y Fecha)

Si lo que quires es saber el consumo de los contadores, entonces NO puedes sacar los datos de las lecturas y debes sumar los consumos
Código SQL [-]
select
  c.numero, c.nombre, c.poblacion, c.patron, sum(l.consumo)
from
  contadores c
    inner join lecturas l on (l.numero = c.numero)
where
  fecha between FechaInicial and FechaFinal
Espero que te sirva
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


La franja horaria es GMT +2. Ahora son las 12:46:07.


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