У меня есть схема (Oracle 11g R2):
CREATE TABLE users (
id INT NOT NULL,
name VARCHAR(30) NOT NULL,
num int NOT NULL
);
INSERT INTO users (id, name, num) VALUES (1,'alan',5);
INSERT INTO users (id, name, num) VALUES (2,'alan',4);
INSERT INTO users (id, name, num) VALUES (3,'julia',10);
INSERT INTO users (id, name, num) VALUES (4,'maros',77);
INSERT INTO users (id, name, num) VALUES (5,'alan',1);
INSERT INTO users (id, name, num) VALUES (6,'maros',14);
INSERT INTO users (id, name, num) VALUES (7,'fero',1);
INSERT INTO users (id, name, num) VALUES (8,'matej',8);
INSERT INTO users (id, name, num) VALUES (9,'maros',55);
И я выполняю следующие запросы - используя LAST_VALUE
аналитическую функцию только с ORDER BY
аналитическим предложением:
Я предполагаю, чточто этот запрос выполняется по одному разделу - целой таблице (поскольку раздел по разделам отсутствует).Он будет сортировать строки по имени в данном разделе (целой таблице) и будет использовать оконное предложение по умолчанию RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
.
select us.*,
last_value(num) over (order by name) as lv
from users us;
Но выполненный выше запрос даст те же результаты, что и следующий.Мое предположение, касающееся второго запроса, заключается в том, что этот запрос сначала разбивает строки таблицы по имени, затем сортирует строки в каждом разделе по num, а затем применяет оконное предложение RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
для каждого раздела, чтобы получить LAST_VALUE
.
select us.*,
last_value(num) over (partition by name order by num RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) as lv
from users us;
Oneмоего предположения явно неверно, потому что два вышеупомянутых запроса дают одинаковый результат.Похоже, что первые записи заказов запросов также по Num за занавесками.Не могли бы вы подсказать, что не так с моими предположениями и почему эти запросы дают одинаковые результаты?
![enter image description here](https://i.stack.imgur.com/TKzdE.png)