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

From: Edwin De La Cruz <edwinspire(at)gmail(dot)com>
To: 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 16:17:06
Message-ID: CAKaZx-q8u_cQpJpszZWMBSrGtSyN4YJpaH1ssM+ZQAhdodRsyQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El 27/04/2016 08:59, "Anthony Sotolongo" <asotolongo(at)gmail(dot)com> escribió:
>
> 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
>
>

Gracias a todos por sus sugerencias. Les pruebo y les comentó.

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message jvenegasperu . 2016-04-27 16:55:29 Re: [MASSMAIL]Re: Problema al ejecutar backup
Previous Message Anthony Sotolongo 2016-04-27 13:59:15 Re: Como obtener el ultimo registro de un rango de registros