Re: Como obtener el ultimo registro de un rango de registros

From: Hellmuth Vargas <hivs77(at)gmail(dot)com>
To: Edwin De La Cruz <edwinspire(at)gmail(dot)com>
Cc: Lista Postgres ES <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Como obtener el ultimo registro de un rango de registros
Date: 2016-04-27 13:53:45
Message-ID: CAN3Qy4rUdxfp8ACdsG9gUPceuwDxj6da9RuLqQ8ShM2J6kVY7A@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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<edwinspire(at)gmail(dot)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(at)postgresql(dot)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

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Hector R. De los Santos 2016-04-27 13:55:01 Re: Como obtener el ultimo registro de un rango de registros
Previous Message Edwin De La Cruz 2016-04-27 13:22:43 Como obtener el ultimo registro de un rango de registros