Funciones de ventana: last_value (ORDER BY ... ASC) igual que last_value (ORDER BY ... DESC)

Data de muestra

CREATE TABLE test
    (id integer, session_ID integer, value integer)
;

INSERT INTO test
    (id, session_ID, value)
VALUES
    (0, 2, 100),
    (1, 2, 120),
    (2, 2, 140),
    (3, 1, 900),
    (4, 1, 800),
    (5, 1, 500)
;

Consulta actual

select 
id,
last_value(value) over (partition by session_ID order by id) as last_value_window,
last_value(value) over (partition by session_ID order by id desc) as last_value_window_desc
from test
ORDER BY id

Estaba teniendo un problema con ellast_value() función de ventana:http://sqlfiddle.com/#!15/bcec0/2

En el violín estoy tratando de trabajar con la dirección de clasificación dentro dellast_value() consulta.

Editar: La pregunta no es: ¿Por qué no obtengo el último valor de todos los tiempos y cómo usar la cláusula frame?unbounded preceding yunbounded following) Sé sobre la diferencia defirst_value(desc) ylast_value() y el problema quelast_value() no te da el último valor de todos los tiempos:

La cláusula frame predeterminada es ilimitada antes de la fila actual. Entonces, el primer valor siempre da la primera fila dentro de la cláusula. Por lo tanto, no importa si solo hay una fila (la cláusula del marco incluye solo esta) o una sola (la cláusula del marco incluye los cien). El resultado es siempre el primero. En el orden DESC es lo mismo: DESC cambia el orden de clasificación y luego la primera fila es el último valor, sin importar cuántas filas obtenga.

Conlast_value() el comportamiento es muy similar: si tiene una fila, le da el último valor de la cláusula frame predeterminada: esta fila. En la segunda fila, la cláusula frame contiene las dos filas, la última es la segunda. Es por esolast_value() no le da la última fila de todas las filas, sino solo la última fila hasta la fila actual.

Pero si cambio el orden a DESC, espero tener la última fila de todas primero, así que obtengo esta en la primera fila, que la última pero la segunda en la segunda fila, y así sucesivamente. Pero ese no es el resultado. ¿Por qué?

Para el ejemplo actual, estos son los resultados defirst_value(), first_value(desc), last_value(), last_value(desc) y lo que espero para ellast_value(desc):

 id | fv_asc | fv_desc | lv_asc | lv_desc | lv_desc(expecting)
----+--------+---------+--------+---------+--------------------
  0 |    100 |     140 |    100 |     100 |    140
  1 |    100 |     140 |    120 |     120 |    120
  2 |    100 |     140 |    140 |     140 |    100
  3 |    900 |     500 |    900 |     900 |    500
  4 |    900 |     500 |    800 |     800 |    800
  5 |    900 |     500 |    500 |     500 |    900

Para mí parece que elORDER BY DESC el indicador se ignora dentro de la cláusula de trama predeterminadalast_value() llamada. Pero no está dentro delfirst_value() llamada. Entonces mi pregunta es: ¿Por qué es ellast_value() resultar igual que ellast_value(desc)?

Respuestas a la pregunta(3)

Su respuesta a la pregunta