Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-11-2008
fcios fcios is offline
Miembro
 
Registrado: jul 2003
Posts: 108
Poder: 21
fcios Va por buen camino
Question Group By

Hola, utilizo Firebird 2.1, yo creo que esto se debería hacer con un GROUP BY pero no puedo,
gracias de antemano

Quiero saber en que últimos movimientos está involucrada la oficina 1

-- Agrego un par de valores para tener con que hacer la prueba
/* CREO UNA TABLA */
CREATE TABLE MOVIMIENTOS (
MOV_ID INTEGER NOT NULL, -- id de esta tabla
OFI_ID INTEGER NOT NULL, -- id de la tabla OFICINAS
MOV_FECHA CHAR(8) NOT NULL, -- fecha del movimiento
ENT_ID INTEGER NOT NULL -- id de la tabla ENTRADAS
);

-- con 2 movimientos para cada entrada ENT_ID 40, 41 y 42
INSERT INTO movimientos (MOV_ID, OFI_ID, MOV_FECHA,ENT_ID) VALUES
(1, 1, '20081101',40);
INSERT INTO movimientos (MOV_ID, OFI_ID, MOV_FECHA,ENT_ID) VALUES
(2, 2, '20081102',40);
INSERT INTO movimientos (MOV_ID, OFI_ID, MOV_FECHA,ENT_ID) VALUES
(3, 1, '20081103',41);
INSERT INTO movimientos (MOV_ID, OFI_ID, MOV_FECHA,ENT_ID) VALUES
(4, 2, '20081104',41);
INSERT INTO movimientos (MOV_ID, OFI_ID, MOV_FECHA,ENT_ID) VALUES
(5, 2, '20081105',42);
INSERT INTO movimientos (MOV_ID, OFI_ID, MOV_FECHA,ENT_ID) VALUES
(6, 1, '20081106',42);


yo quiero saber en que últimos movimientos está involucrada la oficina 1
la salida debería ser
ENT_ID-FECHA----OFI_ID MOV_ID
42------20081106--1-----6

y para la oficina 2

ENT_ID--FECHA---OFI_ID MOV_ID
40------20081102--2-----2
41------20081104--2-----4

-- mi problema es que no puedo mostrar todos los campos que deseo, si hago
SELECT M.ENT_ID, max(M.MOV_FECHA) FECHA FROM MOVIMIENTOS M GROUP BY m.ENT_ID;

obtengo
ENT_ID-----FECHA
40---------20081102
41---------20081104
42---------20081106

esto está correcto, pero necesito poder ver tambien la oficina y me dá error cuando le agrego el campo OFI_ID

SELECT M.ENT_ID, max(M.MOV_FECHA) FECHA, M.OFI_ID FROM MOVIMIENTOS M GROUP BY m.ENT_ID;

si agrego el campo tambien en el GROUP BY anda pero no es la consulta que yo quiero ya que me devuleve todo
SELECT M.ENT_ID, max(M.MOV_FECHA) FECHA, M.OFI_ID FROM MOVIMIENTOS M GROUP BY m.ENT_ID, M.OFI_ID;

gracias de antemano
Responder Con Cita
  #2  
Antiguo 04-11-2008
Avatar de RolphyReyes
RolphyReyes RolphyReyes is offline
Miembro
 
Registrado: ago 2004
Ubicación: Santo Domingo
Posts: 285
Poder: 20
RolphyReyes Va por buen camino
Smile Idea

Saludos.

Antes que nada trata de utilizar las etiquetas del foro para poner el código más legible (elegante).

Podrías utilizar DESC en el Order By .

Código SQL [-]
SELECT M.ENT_ID, M.MOV_FECHA, M.OFI_ID 
 FROM MOVIMIENTOS M   
ORDER BY M.MOV_FECHA DESC
GROUP BY m.ENT_ID

Y en caso de que quieras limitar la cantidad de registros sería
Código SQL [-]
SELECT M.ENT_ID, M.MOV_FECHA, M.OFI_ID 
 FROM MOVIMIENTOS M   
ORDER BY M.MOV_FECHA DESC
GROUP BY m.ENT_ID
ROWS XXX

Espero te sirva de algo.
__________________
Gracias,
Rolphy Reyes
Responder Con Cita
  #3  
Antiguo 04-11-2008
celades1 celades1 is offline
Miembro
 
Registrado: ago 2005
Posts: 116
Poder: 19
celades1 Va por buen camino
Hola

Esto es un truco pero funciona

Te enseñarar los ultimos movimientos fecha e id de movimiento de cada una de las oficinas

Puede haber error de sintaxis, pero la idea es buscar un max de una select que es otro max y que esta ligada a la consulta madre

Código SQL [-]
SELECT M.OFI_ID, max(M.MOV_FECHA) FECHA, 
max((select max(m1.ENT_ID) FROM MOVIMIENTOS M1
where m1.OFI_ID=M.OFI_ID AND M1.MOV_FECHA=M.MOV_FECHA)) MOV_ID
FROM MOVIMIENTOS M 
GROUP BY  M.OFI_ID

Saludos
Responder Con Cita
  #4  
Antiguo 04-11-2008
fcios fcios is offline
Miembro
 
Registrado: jul 2003
Posts: 108
Poder: 21
fcios Va por buen camino
gracias RolphyReyes pero da error.

gracias celades1 por ahí debe andar la cosa voy a seguir probando
Responder Con Cita
  #5  
Antiguo 05-11-2008
fcios fcios is offline
Miembro
 
Registrado: jul 2003
Posts: 108
Poder: 21
fcios Va por buen camino
Talking

Muchas gracias a todos, consulta terminada

SELECT MOVIMIENTOS.MOV_ID, MOVIMIENTOS.OFI_ID, MOVIMIENTOS.MOV_FECHA, MOVIMIENTOS.ENT_ID
FROM MOVIMIENTOS INNER JOIN
(SELECT M.ENT_ID, Max(M.MOV_FECHA) AS MaxDeMOV_FECHA
FROM MOVIMIENTOS AS M
GROUP BY M.ENT_ID) Subconsulta

ON (MOVIMIENTOS.MOV_FECHA = Subconsulta.MaxDeMOV_FECHA) AND (MOVIMIENTOS.ENT_ID = Subconsulta.ENT_ID)

where ofi_id = 1

y si la quiero relacionar con otras tablas para obtener mas datos me quedó

SELECT M1.MOV_ID, M1.OFI_ID, M1.MOV_FECHA, M1.ENT_ID , E.ENT_NUMERO, E.ENT_ANIO, E.TEM_ID, T.TEM_DESCRI
FROM MOVIMIENTOS M1 INNER JOIN
(SELECT M.ENT_ID, Max(M.MOV_FECHA) AS MaxDeMOV_FECHA
FROM MOVIMIENTOS M
GROUP BY M.ENT_ID) Subconsulta

ON (M1.MOV_FECHA = Subconsulta.MaxDeMOV_FECHA) AND (M1.ENT_ID = Subconsulta.ENT_ID)

INNER JOIN ENTRADAS E ON M1.ENT_ID = E.ENT_ID
INNER JOIN TEMAS T ON E.TEM_ID = T.TEM_ID

where ofi_id = 1
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
Group by en firebird santiago14 SQL 7 05-09-2008 15:40:19
uso del Group By esimon SQL 8 05-02-2008 18:14:10
Impresion de group header group footer Manuel Impresión 3 11-11-2007 01:05:23
consultas anidadas: group by dentro otro group by DobleSiete SQL 7 31-01-2005 14:59:31
Group Header, Detail y Footer Group en la misma pagina MarcelRuz Impresión 0 20-04-2004 23:27:14


La franja horaria es GMT +2. Ahora son las 13:53:23.


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