Hola Alvaro Siempre es que toca leer detalladamente la documentacion!! jejeje, claro la verdad no le había puesto mucho cuidado al concepto de frame... muchas gracias!
2018-04-04 15:55 GMT-05:00 Alvaro Herrera <alvhe...@alvh.no-ip.org>: > Hellmuth Vargas escribió: > > > SELECT *, > > array_agg(x) OVER () as todos, > > array_agg(x) OVER (ORDER BY x) as order_asc, > > array_agg(x) OVER (ORDER BY x DESC) as order_desc, > > last_value(x) OVER (ORDER BY x) > > FROM generate_series(1, 5) AS x order by 1; > > > > cuyos resultados son: > > > > x | todos | order_asc | order_desc | last_value > > ---+-------------+-------------+-------------+------------ > > 1 | {1,2,3,4,5} | {1} | {5,4,3,2,1} | 1 > > 2 | {1,2,3,4,5} | {1,2} | {5,4,3,2} | 2 > > 3 | {1,2,3,4,5} | {1,2,3} | {5,4,3} | 3 > > 4 | {1,2,3,4,5} | {1,2,3,4} | {5,4} | 4 > > 5 | {1,2,3,4,5} | {1,2,3,4,5} | {5} | 5 > > (5 rows) > > > > > > Y la verdad no entiendo la lógica del 'filtrado' que hace el order by > > (ASC/DESC). Gracias Lista > > No es el ASC/DESC que hace filtrado. Y en realidad no se hace ningún > filtrado; > lo que se hace es definir el "frame". Como no lo especificas, la > documentación > indica cuál es la definición por omisión: > > The default framing option is RANGE UNBOUNDED PRECEDING, which is > the > same as RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW; it sets > the > frame to be all rows from the partition start up through the > current > row's last peer (a row that ORDER BY considers equivalent to the > current row, or all rows if there is no ORDER BY). > https://www.postgresql.org/docs/10/static/sql-select.html > > es decir, en cada registro, el frame es "todos los registros que vienen > antes del registro actual (UNBOUNDED PRECEDING), y hasta el registro > actual (CURRENT ROW)". Con el ASC/DESC del order by, cambias la > definición de cuáles registros vienen "antes". > > -- > Álvaro Herrera https://www.2ndQuadrant.com/ > PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services > -- 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