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

From: "Guillermo E(dot) Villanueva" <guillermovil(at)gmail(dot)com>
To: "Ivan Perales M(dot)" <ivan(dot)perales(at)gmail(dot)com>
Cc: Edwin De La Cruz <edwinspire(at)gmail(dot)com>, 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-28 18:13:27
Message-ID: CANm+PCDw_8wfNTamwNCKaxH_SGhR8U5TT-zVpxv-PvZz=Bfp6w@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Edwin como estás? como te comentaban, con funciones de ventana lo podes
resolver, ya lo hiciste?

El 27 de abril de 2016, 15:10, Ivan Perales M. <ivan(dot)perales(at)gmail(dot)com>
escribió:

> Alomejor el nuevo lateral join de postgresql te puede ayudar en esto:
>
> http://blog.heapanalytics.com/postgresqls-powerful-new-join-type-lateral/
>
> 2016-04-27 13:01 GMT-05:00 Edwin De La Cruz <edwinspire(at)gmail(dot)com>:
>
>> Saludos
>>
>> El día 27 de abril de 2016, 11:17, Edwin De La Cruz
>> <edwinspire(at)gmail(dot)com> escribió:
>> >
>> > 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
>> >>
>> >>
>>
>> Justo una asi fue que vi en una de las tantas paginas que lei pero la
>> verdad que no la entendi y el ejemplo era para Sql Server.
>> Tengo aun mucho por leer :)
>> Gracias.
>>
>> >> 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ó.
>>
>> -
>> 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
>>
>
>
>
> --
> Lindolfo Iván Perales Mancinas
> Solo existen 10 tipos de personas en el mundo, las que saben binario y las
> que no.
>

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Edwin De La Cruz 2016-04-28 18:30:52 Re: Como obtener el ultimo registro de un rango de registros [SOLUCIONADO]
Previous Message Alberto Cuevas 2016-04-28 15:14:42 Re: Obtener registros