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

From: Anthony Sotolongo <asotolongo(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:59:15
Message-ID: CAASDfF1XuUSuPDKVNc8GAqF5zzQOex+bb8XjnyXWn1=g3xeS3w@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

HOla Edwin, una buena opcion es usar WINDOWS FUNCTIONS y una posible
solucion pudiera ser:

with resultado as (
select row_number()OVER (PARTITION BY idevettype,idaccount, zu order by
idevent desc ) as num, *,max(dateevent )OVER (PARTITION BY idevettype,
idaccount, zu order by idevent desc ) 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 tabla (idevent ,idevettype ,zu ,idaccount, dateevent)
)

select idevent, idevettype, zu, idaccount, dateevent from resultado where
num<2

saludos

El 27 de abril de 2016, 10: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
>

In response to

Responses

Browse pgsql-es-ayuda by date

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