![]() |
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 :confused:-- 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 |
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 .
Y en caso de que quieras limitar la cantidad de registros sería
Espero te sirva de algo. |
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
Saludos |
gracias RolphyReyes pero da error.
gracias celades1 por ahí debe andar la cosa voy a seguir probando |
:) 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 |
La franja horaria es GMT +2. Ahora son las 05:35:58. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi