powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как заполнить значение ячейки значением из предыдущей строки?
6 сообщений из 6, страница 1 из 1
Как заполнить значение ячейки значением из предыдущей строки?
    #40087576
n_script
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет!
Имеется таблица, кусок:
id_order | id_user | price | o_date
4914557 | 4010777 | 2670 | 16.06.2017
4914559 | 3764611 | 0 | (null)

Надо там, где o_date isnull, проставить значение из предыдущей строки (к примеру, в приведенном чтобы было 16.06.2017).
Таблица больше 4 млн строк, o_date isnull много в разных местах. Как это сделать массово по всей таблице?
...
Рейтинг: 0 / 0
Как заполнить значение ячейки значением из предыдущей строки?
    #40087606
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если просто в запросе, то coalesce(lag(...)).
...
Рейтинг: 0 / 0
Как заполнить значение ячейки значением из предыдущей строки?
    #40087635
n_script
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,
Отлаживаю, пишу:
SELECT *, lag(o_date) OVER (PARTITION BY id_order ORDER BY id_order) AS previous_date FROM orders_all
WHERE id_order = 221;
Возвращает:
previous_date
(null)
Что не так?
...
Рейтинг: 0 / 0
Как заполнить значение ячейки значением из предыдущей строки?
    #40087698
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
n_script,

уберите PARTITION BY id_order вы же сами сказали в пределах id_order искать конкретного предыдущую запись.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Как заполнить значение ячейки значением из предыдущей строки?
    #40087699
n_script
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,
Убрала, все равно в столбце previous_date значение (null)
...
Рейтинг: 0 / 0
Как заполнить значение ячейки значением из предыдущей строки?
    #40087707
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
n_script
Maxim Boguk,
Убрала, все равно в столбце previous_date значение (null)


что тоже вполне очевидно например потому что WHERE id_order = 221 стоит а он применяется до того как lag/window применять.

Код: sql
1.
2.
3.
SELECT * FROM 
(SELECT *, lag(o_date) OVER (PARTITION BY id_order ORDER BY id_order) AS previous_date FROM orders_all) AS _t
WHERE id_order = 221;



например.

Но если вам надо для конкретного id_order а не по всей таблице считать то конечно будет эффективнее другой запрос:
Код: sql
1.
2.
3.
SELECT t1.*, 
(SELECT t2.o_date FROM orders_all t2 WHERE t2.o_date<t1.o_date ORDER BY o_date DESC LIMIT 1) as previous_date 
FROM orders_all t1 WHERE t1.id_order = 221;


предполагая конечно наличие индекса по id_order (хотя и без него наверное будет быстрее).

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как заполнить значение ячейки значением из предыдущей строки?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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