Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta Con Group By (https://www.clubdelphi.com/foros/showthread.php?t=13701)

VRO 27-08-2004 16:54:33

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.

__cadetill 27-08-2004 19:48:59

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

Sirkius 27-08-2004 20:01:59

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 ;)

roman 27-08-2004 20:04:54

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

Sirkius 27-08-2004 20:23:18

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... :o

VRO 30-08-2004 08:16:37

Gracias por vuestra ayuda.

VRO 30-08-2004 17:03:14

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

__cadetill 30-08-2004 17:31:24

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?

VRO 30-08-2004 17:44:00

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.

__cadetill 30-08-2004 18:06:07

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


La franja horaria es GMT +2. Ahora son las 23:56:49.

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