Re: BUG #7685: last_value() not consistent throughout window partition

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: BUG #7685: last_value() not consistent throughout window partition
Дата
Msg-id 9922.1353433645@sss.pgh.pa.us
обсуждение исходный текст
Ответ на BUG #7685: last_value() not consistent throughout window partition  (wes@devauld.ca)
Ответы Re: BUG #7685: last_value() not consistent throughout window partition  (Wes Devauld <wes@devauld.ca>)
Список pgsql-bugs
wes@devauld.ca writes:
> -- The last_value(0 window function appears to be changing values
> -- mid window.  An example is detailed below.

So far as I can see, these results are correct per spec.  Note the
caution in the manual about these window functions:

  Note that first_value, last_value, and nth_value consider only the rows
  within the "window frame", which by default contains the rows from the
  start of the partition through the last peer of the current row. This is
  likely to give unhelpful results for last_value and sometimes also
  nth_value. You can redefine the frame by adding a suitable frame
  specification (RANGE or ROWS) to the OVER clause. See Section 4.2.8 for
  more information about frame specifications.

Since your d1 values are all distinct, the last peer is the same as the
current row, so last_value(v) ends up just producing the current row's v.
Which is what the query is producing.

If you want the last row in the partition, you could use first_value
with the opposite sort order, or use last_value with the same sort
order and RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING.
(The current SQL committee is nothing if not verbose :-()

            regards, tom lane

В списке pgsql-bugs по дате отправления:

Предыдущее
От: "David Johnston"
Дата:
Сообщение: {Not A Bug} RE: BUG #7685: last_value() not consistent throughout window partition
Следующее
От: Tom Lane
Дата:
Сообщение: Re: BUG #7643: Issuing a shutdown request while server startup leads to server hang