Tema: Group By
Ver Mensaje Individual
  #1  
Antiguo 04-11-2008
fcios fcios is offline
Miembro
 
Registrado: jul 2003
Posts: 108
Reputación: 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