Re: Como obtener el ultimo registro de un rango de registros [SOLUCIONADO]

From: Edwin De La Cruz <edwinspire(at)gmail(dot)com>
To: "Guillermo E(dot) Villanueva" <guillermovil(at)gmail(dot)com>
Cc: "Ivan Perales M(dot)" <ivan(dot)perales(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 [SOLUCIONADO]
Date: 2016-04-28 18:30:52
Message-ID: CAKaZx-r8RRsnY1R5qOU=kyNEO6qQFBU66ia7sT-RFiQE2ojS-A@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Saludos.

El día 28 de abril de 2016, 13:13, Guillermo E. Villanueva
<guillermovil(at)gmail(dot)com> escribió:
> 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.
>
>

Mil gracias a todos, la primera sugerencia la probé y me funciono sin problemas.
Ahora estaba probando las vistas materializadas pero la vedad para lo
que necesito no me dio resultado, el refresco de datos me resulta muy
lento, mejor una vista normal es aceptable.

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 suscripcin:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alberto Cuevas 2016-04-28 23:06:53 Re: Restar dos campos de tipo fecha de distintos registros
Previous Message Guillermo E. Villanueva 2016-04-28 18:13:27 Re: Como obtener el ultimo registro de un rango de registros