Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   agrupar registros por año, mes, dia en query? (https://www.clubdelphi.com/foros/showthread.php?t=2784)

adfa 06-08-2003 17:06:36

agrupar registros por año, mes, dia en query?
 
Hola a todos.
Estoy necesitando hacer la siguiente consulta sobre un archivo dbf con el tquery:
SELECT YEAR(mfecha) as anio, MONTH(mfecha) as mes, DAY(mfecha) as dia, mmoneda, magencia, mempresa,
sum(mimporte), sum(mcomision), sum(mtalones)
FROM C:\DBF\MENSUAL
GROUP BY anio, mes, dia, mmoneda, magencia, mempresa

En otros motores de base de datos si me funciona pero contra un dbf me da error de sintaxis.
Lo que necesito es agrupar por año, mes dia etc.
Si no se puede por sql , hay alguna otra forma de hacerlo.

Desde ya muchas gracias.

delphi.com.ar 06-08-2003 17:11:09

¿No es lo mismo que agrupar por fecha?

¿Existen las funciones Year Month y Day en ese Sql?
Si es así, prueba esto:
Código:

SELECT YEAR(mfecha) as anio, MONTH(mfecha) as mes, DAY(mfecha) as dia,
mmoneda, magencia, mempresa,
sum(mimporte), sum(mcomision), sum(mtalones)
FROM C:\DBF\MENSUAL
GROUP BY YEAR(mfecha) , MONTH(mfecha), DAY(mfecha), mmoneda, magencia, mempresa

EDIT: quitar el scroll horizontal (lo siento delphi.com.ar)

adfa 07-08-2003 15:16:23

Perdon el dia se me fue de mas.
En realidad tendria que poder agrupar por 2 cualquiera
por ej año-mes o mes-dia

Gracias.

__cadetill 07-08-2003 18:25:31

Pues es como te comenta delphi.com.ar pero quitando el que no quieras tanto de la sentencia Select como del Group By

mguixot 03-10-2003 19:30:24

Sobre tu sentencia sql,agupando por dias meses y años, te llegó a funcionar las funciones day(), month() y year(), por que yo estoy intentando usarlas en Interbase, pero no me deja. He conseguido instalar las udf's, pero no me dejan incluirlas en el group by, es decir:

SELECT count(*), mer_day(AV_FECHA)
FROM ALBARAN_vENTA
group by mer_day(av_fecha)

me da un error en la funcion mer_day, del group by.

Se os ocurre algo???
Gracias

Julià T. 04-10-2003 04:15:11

Me suena que es (en dbf y en interbase también funciona):

EXTRACT(YEAR FROM SaleDate) AS YearNo,
EXTRACT(MONTH FROM SaleDate) AS MonthNo,
EXTRACT(WEEK FROM SaleDate) AS WeekNo,
EXTRACT(DAYOFWEEK FROM SaleDate) AS WeekDayNo,
EXTRACT(DAYOFYEAR FROM SaleDate) AS YearDayNo,
EXTRACT(DAY FROM SaleDate) AS DayNo

No sé ha evolucionado la función sin el EXTRACT

mguixot 06-10-2003 13:20:17

Al parecer si que ha evolucionado, y te permite utilizar el Day, Month, year, etc, en lugar del extract. El problema que tengo yo, es que no me permite incluir esta serie de campos el el group by de mi consulta.
Sabeis a que se debe, y como solucionarlo?

Saludos dsd alicante

__cadetill 06-10-2003 13:34:02

acabo de probar esto en Firebird 1.5 RC6 y funciona correctamente. Con dbf no lo he probado :(

Código:

select extract(year from fechas)
from cabecera
group by extract(year from fechas)


mguixot 06-10-2003 13:46:45

No entiendo, lo acabo de probar en Interbase 6.0, y me da una excepcion en el group by -> 'token unknow extract'

Código:

select extract(year from av_fecha)
from albaran_venta
group by extract(year from av_fecha)

Ya no se que pensar, :confused:

Gracias

__cadetill 06-10-2003 14:04:42

Provado con Firebird 1.0.2 y tampoco funciona (será algo nuevo de la 1.5 :confused: ??)

De todas maneras, si no necesitas hacer agregados, puedes utilizar el distinct que, almenos con Firebird sí que funciona

Código:

select DISTINCT EXTRACT(year from fecha)
from PRUEBA

Otra alternativa sería pasarse a Firebird 1.5 RC6 :D

mguixot 06-10-2003 14:18:21

ESO SI QUE ME FUNCIONA, TANTO CON EL EXTRACT, COMO CON EL MONTH(), YEAR() Y DAY().
PERO NO ME DEJA INCLUIRLO EN EL GROUP BY...:mad:

ME TOCARÁ CREAR UN PROCEDIMIENTO ALMACENADO, PERO ME PARECE BASTANTE EXTRAÑO QUE INTERBASE 6.0, NO CONTEMPLE ESTO.

SEGUIRE INVESTIGANDO, MUCHAS GRACIAS

__cadetill 06-10-2003 14:27:00

Cita:

Posteado originalmente por mguixot
PERO NO ME DEJA INCLUIRLO EN EL GROUP BY...:mad:
Con el DISTINCT no necesitas hacer el GROUP BY y sólo te servirá para aquellas consultas, como te comentaba antes, en las que no hagas un sum, count,.....

Julià T. 06-10-2003 18:41:56

Hola a todos:

No sé si sirve ni si es válido "Group by 2" 2=2ª columna

La vez que tuve que hacer algo así creo que hice una vista con mes, dia y año y luego un select de la vista (lo digo así de memoria)

mguixot 06-10-2003 18:58:20

Nada, he probado casi todas las combinaciones. Al final me he decantado por crearme una vista, con esos campos de la fecha. Y realizar la consulta sobre ella.

Saludos


La franja horaria es GMT +2. Ahora son las 05:44:30.

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