powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / last_value странный результат
33 сообщений из 33, показаны все 2 страниц
last_value странный результат
    #39713193
Maxifly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понимаю, почему last_value дает такой результат:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
SQL> select t.rowid, t.asua_id, t.del_date,
  2    first_value(t.rowid) over(order by del_date ASC NULLS FIRST) fr,
  3    last_value(t.rowid) over(order by del_date ASC NULLS FIRST) lr
  4    from AS_USER_ATTRIBUTES t
  5    order by t.rowid;
ROWID                            ASUA_ID DEL_DATE    FR                                  LR
------------------- -------------------- ----------- ------------------ --------------------
AAAFmoAAFAAAAH8AAA       100100000000001             AAAFmoAAFAAAAH8AAA  AAAFmoAAFAAAAH/AAJ
AAAFmoAAFAAAAH8AAB       100100000000002             AAAFmoAAFAAAAH8AAA  AAAFmoAAFAAAAH/AAJ
AAAFmoAAFAAAAH8AAC       100100000000003             AAAFmoAAFAAAAH8AAA  AAAFmoAAFAAAAH/AAJ
AAAFmoAAFAAAAH8AAD       100100000000004             AAAFmoAAFAAAAH8AAA  AAAFmoAAFAAAAH/AAJ
AAAFmoAAFAAAAH8AAE       100100000000005             AAAFmoAAFAAAAH8AAA  AAAFmoAAFAAAAH/AAJ
AAAFmoAAFAAAAH8AAF       100100000000006             AAAFmoAAFAAAAH8AAA  AAAFmoAAFAAAAH/AAJ
AAAFmoAAFAAAAH/AAA       100100000000007 04.10.2018  AAAFmoAAFAAAAH8AAA  AAAFmoAAFAAAAH/AAA
AAAFmoAAFAAAAH/AAB       100100000000008             AAAFmoAAFAAAAH8AAA  AAAFmoAAFAAAAH/AAJ
AAAFmoAAFAAAAH/AAC       100100000000009             AAAFmoAAFAAAAH8AAA  AAAFmoAAFAAAAH/AAJ
AAAFmoAAFAAAAH/AAD       100100000000010             AAAFmoAAFAAAAH8AAA  AAAFmoAAFAAAAH/AAJ
AAAFmoAAFAAAAH/AAE       100100000000011 06.10.2018  AAAFmoAAFAAAAH8AAA  AAAFmoAAFAAAAH/AAE
AAAFmoAAFAAAAH/AAF       100100000000012             AAAFmoAAFAAAAH8AAA  AAAFmoAAFAAAAH/AAJ
AAAFmoAAFAAAAH/AAG       100100000000013             AAAFmoAAFAAAAH8AAA  AAAFmoAAFAAAAH/AAJ
AAAFmoAAFAAAAH/AAH       100100000000014             AAAFmoAAFAAAAH8AAA  AAAFmoAAFAAAAH/AAJ
AAAFmoAAFAAAAH/AAI       100100000000015             AAAFmoAAFAAAAH8AAA  AAAFmoAAFAAAAH/AAJ
AAAFmoAAFAAAAH/AAJ       100100000000016             AAAFmoAAFAAAAH8AAA  AAAFmoAAFAAAAH/AAJ
16 rows selected


Группа одна. Сортируется по del_date. Значит last_value должна вернуть rowid соответсвующий записи с del_date 06.10.2018. То есть AAAFmoAAFAAAAH/AAE.

А результата - три разных. Как будто есть три группы.

Правильный ответ будет тиолько если я явно указываю безразмерное окно:

last_value(t.rowid) over(order by del_date ASC NULLS FIRST ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)

Не понимаю, почему так.


Люблю галеры - работящий коллектив, романтика мужского труда. Стоишь на мостике в пене брызг и эдак поворотясь:
- Голубчик! Утроить количество ударов - Али-паша уходит...
...
Рейтинг: 0 / 0
last_value странный результат
    #39713200
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxiflyГруппа одна. Сортируется по del_date. Значит last_value должна вернуть rowid соответсвующий записи с del_date 06.10.2018. То есть AAAFmoAAFAAAAH/AAE.

А результата - три разных. Как будто есть три группы.
Это потому что кое-кто не понимает, какие умолчания действуют для сортированных окон.
Что у нас по синтаксису пишется после order by?
Отож :)
...
Рейтинг: 0 / 0
last_value странный результат
    #39713209
Maxifly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
А я-то думал безразмерный по умолчанию.

Блин, век живи - век учись.
...
Рейтинг: 0 / 0
last_value странный результат
    #39713211
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxiflyА я-то думал безразмерный по умолчанию.
Без order by - "безразмерный".
...
Рейтинг: 0 / 0
last_value странный результат
    #39713330
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxiflyandrey_anonymous,
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
А я-то думал безразмерный по умолчанию.

Блин, век живи - век учись.
Вы уверены что по умолчанию такое окно?

імхо
ето не так

.....
stax
...
Рейтинг: 0 / 0
last_value странный результат
    #39713373
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

Да, range.
...
Рейтинг: 0 / 0
last_value странный результат
    #39713621
SkilledJunior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LAST_VALUE

авторIf you omit the windowing_clause of the analytic_clause, it defaults to RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW. This default sometimes returns an unexpected value, because the last value in the window is at the bottom of the window, which is not fixed. It keeps changing as the current row changes. For expected results, specify the windowing_clause as RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING. Alternatively, you can specify the windowing_clause as RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING.

имхо не совсем правильное поведение, по умолчанию должно было бы быть без ограничений, хочешь ограничить указывай как, но что выросло то выросло.
...
Рейтинг: 0 / 0
last_value странный результат
    #39713627
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SkilledJuniorимхо не совсем правильное поведение
Еще один воинствующий?
Предлагаю поискать систему :
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SQL> with t as (select rownum r from dual connect by level < 10)
  2  select max(r) over()
  3       , max(r) over(order by r)
  4       , sum(r) over()
  5       , sum(r) over(order by r)
  6       , last_value(r) over()
  7       , last_value(r) over(order by r)
  8    from t
  9  ;
MAX(R)OVER() MAX(R)OVER(ORDERBYR) SUM(R)OVER() SUM(R)OVER(ORDERBYR) LAST_VALUE(R)OVER() LAST_VALUE(R)OVER(ORDERBYR)
------------ -------------------- ------------ -------------------- ------------------- ---------------------------
           9                    1           45                    1                   9                           1
           9                    2           45                    3                   9                           2
           9                    3           45                    6                   9                           3
           9                    4           45                   10                   9                           4
           9                    5           45                   15                   9                           5
           9                    6           45                   21                   9                           6
           9                    7           45                   28                   9                           7
           9                    8           45                   36                   9                           8
           9                    9           45                   45                   9                           9
9 rows selected

SQL> 
...
Рейтинг: 0 / 0
last_value странный результат
    #39713646
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

лично мне более удобно если БЫ по умолчанию было ROWS

.....
stax
...
Рейтинг: 0 / 0
last_value странный результат
    #39713654
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SkilledJuniorимхо не совсем правильное поведение, по умолчанию должно было бы быть без ограничений, хочешь ограничить указывай как,
...
Рейтинг: 0 / 0
last_value странный результат
    #39713711
SkilledJunior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymousSkilledJuniorимхо не совсем правильное поведение
Еще один воинствующий?
Предлагаю поискать систему :
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SQL> with t as (select rownum r from dual connect by level < 10)
  2  select max(r) over()
  3       , max(r) over(order by r)
  4       , sum(r) over()
  5       , sum(r) over(order by r)
  6       , last_value(r) over()
  7       , last_value(r) over(order by r)
  8    from t
  9  ;
MAX(R)OVER() MAX(R)OVER(ORDERBYR) SUM(R)OVER() SUM(R)OVER(ORDERBYR) LAST_VALUE(R)OVER() LAST_VALUE(R)OVER(ORDERBYR)
------------ -------------------- ------------ -------------------- ------------------- ---------------------------
           9                    1           45                    1                   9                           1
           9                    2           45                    3                   9                           2
           9                    3           45                    6                   9                           3
           9                    4           45                   10                   9                           4
           9                    5           45                   15                   9                           5
           9                    6           45                   21                   9                           6
           9                    7           45                   28                   9                           7
           9                    8           45                   36                   9                           8
           9                    9           45                   45                   9                           9
9 rows selected

SQL> 


Почему сразу воинствующий?

Например, max(r) over() и max(r) over(order by r), ты можешь объяснить почему максимальное значение должно зависеть от сортировки?
...
Рейтинг: 0 / 0
last_value странный результат
    #39713718
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SkilledJuniorПочему сразу воинствующий?Потому что не читает документацию.
...
Рейтинг: 0 / 0
last_value странный результат
    #39713719
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SkilledJuniorпочему максимальное значение должно зависеть от сортировки?Возможно, пригодится пример из моей книги .
Подраздел "Differences and interchangeability of functions", страница 49.
...
Рейтинг: 0 / 0
last_value странный результат
    #39713720
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SkilledJuniorНапример, max(r) over() и max(r) over(order by r), ты можешь объяснить почему максимальное значение должно зависеть от сортировки?
максимальное значение зависит от окна
окно разное для over() и over(order by r)

.....
stax
...
Рейтинг: 0 / 0
last_value странный результат
    #39713734
SkilledJunior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshop,
Добавил в избранное, ознакомлюсь попозже, спасибо.

Stax,
Вопрос как раз в том, почему разное, я не задавал ограничения окна в явном виде, оно наложено по умолчанию потому что так посчитали нужным разработчики, имхо это не совсем верно.

ElicПотому что не читает документацию.
В документации "что выросло, то выросло", а могло бы быть и по другому, ИМХО по другому было бы логичнее, но это мое ИМХО.
...
Рейтинг: 0 / 0
last_value странный результат
    #39713737
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxлично мне более удобно если БЫ по умолчанию было ROWSдобавляй в order by уникальное значение, хотя бы rownum, и будет тебе "rows".
...
Рейтинг: 0 / 0
last_value странный результат
    #39713738
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SkilledJuniorВ документации "что выросло, то выросло", а могло бы быть и по другому, ИМХО по другому было бы логичнее, но это мое ИМХО.Ага, злые дяди, писавшие стандарт, забыли спросить у шкета на горшке, как ему будет потом логичнее.
...
Рейтинг: 0 / 0
last_value странный результат
    #39713842
SkilledJunior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ElicАга, злые дяди, писавшие стандарт, забыли спросить у шкета на горшке, как ему будет потом логичнее.
Ну да, прямо боги с небес спустились горшки обжигать стандарт писать))

Staxлично мне более удобно если БЫ по умолчанию было ROWS
Согласен.

andrey_anonymousПредлагаю поискать систему :
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW (по умолчанию), не имеет смысла:
max(r) over(order by r)
last_value(r) over(order by r)
и в том и другом случае они просто равны r

не имеет смысла order by:
max(r) over(order by r RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
sum(r) over(order by r RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)

last_value(r) over() - вообще непредсказуемый результат.
...
Рейтинг: 0 / 0
last_value странный результат
    #39713845
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SkilledJuniorRANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW (по умолчанию), не имеет смысла:
max(r) over(order by r)
last_value(r) over(order by r)
и в том и другом случае они просто равны r


Да ну? Шел бы ты учить матчасть:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
with t as (select 'A' r from dual union all select null from dual)
select  row_number() over(order by r) rn,
        r,
        max(r) over(order by r) max_r,
        last_value(r) over(order by r) last_r
  from  t
/

        RN R MAX_R LAST_R
---------- - ----- ------
         1 A A     A
         2   A

SQL> 



SkilledJuniorlast_value(r) over() - вообще непредсказуемый результат.


С точностью до наоборот. last_value(r) over() всегда вернет последнее в порядке возрастания значение r среди всех выбранных значений r.

SY.
...
Рейтинг: 0 / 0
last_value странный результат
    #39713850
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SkilledJuniorlast_value(r) over() - вообще непредсказуемый результат.Воинствующий ламер.
...
Рейтинг: 0 / 0
last_value странный результат
    #39713870
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SkilledJuniorRANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW (по умолчанию), не имеет смыслакак раз открытая задняя граница в макс не имеет смысла так как совпадает с вообще без указания ордер бы. Причем даже в случае разных выражений макс-значения и сортировки.

SkilledJuniorlast_value(r) over() - вообще непредсказуемый результат.Where rownum без сортировки в подзапросе. Кто-то заставляет полагаться на порядок без указания ордер бы?
...
Рейтинг: 0 / 0
last_value странный результат
    #39713889
SkilledJunior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-,

Речь о том, что параметров по умолчанию для любых случаев нет, результат работы аналитических функций в определенных условиях теряет смысл и эти условия для разных функций разные.
...
Рейтинг: 0 / 0
last_value странный результат
    #39713894
SkilledJunior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-Where rownum без сортировки в подзапросе. Кто-то заставляет полагаться на порядок без указания ордер бы?
Не очень понял при чем здесь rownum, вроде про аналитические функции ведем разговор, для last_value сортировка в подзапросе ничего не гарантирует.

SYДа ну? Шел бы ты учить матчасть
Мы рассматривали вариант с суррогатным первичным ключом для строки выборки, а он вроде как not null, в противном случае ситуация поправима))

Код: plsql
1.
last_value(r IGNORE NULLS) over(order by r) last_r



SYС точностью до наоборот. last_value(r) over() всегда вернет последнее в порядке возрастания значение r среди всех выбранных значений r.

ElicSkilledJuniorlast_value(r) over() - вообще непредсказуемый результат.Воинствующий ламер.

Ребята, позвольте с вами не согласиться, помедитируйте на досуге:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with
t (id, r, dt, part) as
(
select 1, 10, date '2015-07-01', 1 from dual union all
select 2, 3,  date '2015-08-01', 1 from dual union all
select 3, 2,  date '2015-09-01', 1 from dual union all
select 4, 0,  date '2016-11-01', 1 from dual union all
select 5, 5,  date '2016-11-01', 1 from dual union all
select 6, 9,  date '2017-01-01', 1 from dual union all
select 7, 4,  date '2017-01-01', 1 from dual
)



4
Код: plsql
1.
2.
3.
select r
, last_value(r) over() last_r
from t



10
Код: plsql
1.
2.
3.
select r
, last_value(r) over() last_r
from (select * from t order by r)



10
Код: plsql
1.
2.
3.
4.
select r
, last_value(r) over() last_r
, max(r) over(order by r) max_r
from t



0
Код: plsql
1.
2.
3.
4.
select r
, last_value(r) over() last_r
, max(r) over(order by r DESC) max_r
from (select * from t order by r)
...
Рейтинг: 0 / 0
last_value странный результат
    #39713895
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SkilledJunior параметров по умолчанию для любых случаев нетдефолтные параметры есть.
Ламеризм побуждает тебя искать несуществующие изъяны. Просмотрел последние десять тем с применением last_value. Только в одной используется unbounded following.
Одинаковые дефолты не только позволяют применять пользовательские и десятки стандартных функций без оглядки в документацию на вариативность, но и оберегают ленивых джуниоров от лишних умолчательных пересортировок.
...
Рейтинг: 0 / 0
last_value странный результат
    #39713896
SkilledJunior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-Одинаковые дефолты не только позволяют применять пользовательские и десятки стандартных функций без оглядки в документацию на вариативность
Это не так и ТС тому пример.
...
Рейтинг: 0 / 0
last_value странный результат
    #39713904
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SkilledJunior-2-Одинаковые дефолты не только позволяют применять пользовательские и десятки стандартных функций без оглядки в документацию на вариативностьЭто не так и ТС тому пример.В русском языке правильно употреблятствовать "без оглядки НА ...". "в документацию" второстепенное уточнение.
...
Рейтинг: 0 / 0
last_value странный результат
    #39714157
SkilledJunior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-В русском языке правильно употреблятствовать "без оглядки НА ...". "в документацию" второстепенное уточнение.
В русском языке нет такой корявой конструкции как "без оглядки в ... на ...", но это не важно, ибо форум не посвящен чистоте русского языка.

По смысловой нагрузке тоже ничего радикально не меняется, если бы вы были правы эта тема не появилась бы.
...
Рейтинг: 0 / 0
last_value странный результат
    #39714190
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SkilledJuniorПо смысловой нагрузке тоже ничего радикально не меняется, если бы вы были правы эта тема не появилась бы.Ламерьё всегда прикрывает некой "логикой" неспособность к вдумчивому прочтению документации.
...
Рейтинг: 0 / 0
last_value странный результат
    #39714309
SkilledJunior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ElicЛамерьё всегда прикрывает некой "логикой" неспособность к вдумчивому прочтению документации.

Ты сам на грабли наступил 21697010 , это означает твою неспособность вдумчиво читать документацию?
...
Рейтинг: 0 / 0
last_value странный результат
    #39714313
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SkilledJuniorТы сам на грабли наступил 21697010 , это означает твою неспособность вдумчиво читать документацию?Перестань бредить.
...
Рейтинг: 0 / 0
last_value странный результат
    #39714368
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Staxлично мне более удобно если БЫ по умолчанию было ROWSдобавляй в order by уникальное значение, хотя бы rownum, и будет тебе "rows".
результат совпадет с ROWS
но, насколько я себе представляю ранже алгоритм более сложен
поетому, когда не ленился явно прописывал окно из-за ROWS

ps
повторюсь, мне бы удобнее было чтоб по умолчанию был ROWS,
и не надо было б добавлять rownum/rowid и тд

....
stax
...
Рейтинг: 0 / 0
last_value странный результат
    #39714397
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxи не надо было б добавлять rownum/rowid и тдА мне удобней обеспечивать детерминированную сортировку.
...
Рейтинг: 0 / 0
last_value странный результат
    #39714412
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicStaxи не надо было б добавлять rownum/rowid и тдА мне удобней обеспечивать детерминированную сортировку.
не вопрос

імхо
нужно больше ресерсов
1) сложнее алгоритм
2) больше ключ сортировки

.....
stax
...
Рейтинг: 0 / 0
33 сообщений из 33, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / last_value странный результат
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]