Hola Edwin

Propongo esta solución empleado Windows Functions, (solo requeriría la
parte en negrilla, lo de arriba es para poder ejecutar el query con los
datos proporcionados):


with  events as (
select * from (values
('1','56','1',100,'03/01/16 00:00'::timestamp),
('2','62','1',100,'04/01/16 00:00'::timestamp),
('3','62','2',100,'03/01/16 20:45'::timestamp),
('4','56','1',100,'04/01/16 10:00'::timestamp),
('5','56','9',200,'03/01/16 00:00'::timestamp),
('6','62','1',200,'04/01/16 15:00'::timestamp),
('7','56','1',100,'07/01/16 00:00'::timestamp),
('8','62','1',100,'09/01/16 00:00'::timestamp),
('9','62','1',100,'09/01/16 13:00'::timestamp),
('10','56','1',100,'09/01/16 15:12'::timestamp)) as
a(idevent,idevettype,zu,idaccount,dateevent)

)
*select idevent,idevettype,zu,idaccount,de*
*FROM (*
*          SELECT idevent,idevettype, zu, idaccount,dateevent,
MAX(dateevent) over(partition by idevettype, zu, idaccount) AS de FROM
 events*
*          where (idaccount = 100 OR idaccount = 200) *
*) as y WHERE dateevent=de*
*ORDER BY 2,3,4*







El 27 de abril de 2016, 08:22, Edwin De La Cruz<edwinsp...@gmail.com>
escribió:

> Saludos cordiales.
> Tengo una tabla cuyos campos relevantes son:
> idevent idevettype zu idaccount dateevent
> 1 56 1 100 03/01/16 00:00
> 2 62 1 100 04/01/16 00:00
> 3 62 2 100 03/01/16 20:45
> 4 56 1 100 04/01/16 10:00
> 5 56 9 200 03/01/16 00:00
> 6 62 1 200 04/01/16 15:00
> 7 56 1 100 07/01/16 00:00
> 8 62 1 100 09/01/16 00:00
> 9 62 1 100 09/01/16 13:00
> 10 56 1 100 09/01/16 15:12
>
> Y necesito una consulta que me devuelva algo asi:
>
> idevent idevettype zu idaccount dateevent
> 10 56 1 100 09/01/16 15:12
> 9 62 1 100 09/01/16 13:00
> 6 62 1 200 04/01/16 15:00
> 3 62 2 100 03/01/16 20:45
> 5 56 9 200 03/01/16 00:00
>
>
> Usando la consulta:
> SELECT ideventtype, zu, idaccount, MAX(dateevent) AS de FROM  events
> where (idaccount = 100 OR idaccount = 200) GROUP BY ideventtype,
> idaccount, zu;
>
> Me devuelve las filas que esperaría recibir, pero.... el campo que
> necesito en realidad es el idevent, si agrego esa columna a la
> consulta obtengo el error:
>
> ERROR: la columna «events.idevent» debe aparecer en la cláusula GROUP
> BY o ser usada en una función de agregación
> SQL state: 42803
> Character: 8
>
>
> Quiza sea una pregunta de novato pero he leído y leído y en ningún
> caso he conseguida hacer que funcione como espero.
> Encontré una solución a lo que necesito pero era para SQL SERVER con
> unas funciones que no había visto antes, ahora mismo no recuerdo y no
> reencuentro el link para ponerlo aqui.
>
>
> Espero que alguien que se haya visto en este caso o similar me pueda
> orientar un poco.
>
>
> Mis proyectos de software libre en:
> Github - edwinspire
>
> -
> Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org
> )
> Para cambiar tu suscripción:
> http://www.postgresql.org/mailpref/pgsql-es-ayuda
>



-- 
Cordialmente,

Ing. Hellmuth I. Vargas S.
Esp. Telemática y Negocios por Internet
Oracle Database 10g Administrator Certified Associate
EnterpriseDB Certified PostgreSQL 9.3 Associate

Responder a