powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Поиск предыдущего NOT NULL значения в данной группе
5 сообщений из 5, страница 1 из 1
Поиск предыдущего NOT NULL значения в данной группе
    #39982955
Murderface_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Подскажите пожалуйста как можно найти последнее NOT NULL значение?
На скриншоте таблица, ниже код для ее создания. Нужно заменить NULL значения в столбце text на значения, где для текущего id и меньшего partition_id в столбце text есть NOT NULL значение. Т. е. в строке 2 будет one, в строке 3 one, в строке 5 NULL (т. к. это первый ID и для него нет меньшего NOT NULL partition_id, в строке 7 three.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE my_table (id int, partition_id int, text varchar);
INSERT INTO my_table VALUES
(1, 1, 'one'),
(1, 2, NULL),
(1, 3, NULL),
(1, 4, 'two'),
(2, 1, NULL),
(2, 2, 'three'),
(2, 3, NULL);



P. s. а можно как то с помощью SQL запроса в самом сообщении таблицу создавать, чтобы не картинкой? Скриншот с таблицей тоже почему то не могу приложить(
...
Рейтинг: 0 / 0
Поиск предыдущего NOT NULL значения в данной группе
    #39983055
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Murderface_,

если не "испугает" :)
Код: sql
1.
2.
3.
4.
5.
6.
select 
	id
    ,partition_id 
    ,text
    ,coalesce(text, substring(max(right('000000'||partition_id, 6)||text)over(partition by id order by partition_id),7)) as xz
from test.my_table



idpartition_idtextxz11oneone12nullone13nullone14twotwo21nullnull22threethree23nullthree
...
Рейтинг: 0 / 0
Поиск предыдущего NOT NULL значения в данной группе
    #39983059
Murderface_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо! Буду разбираться.
...
Рейтинг: 0 / 0
Поиск предыдущего NOT NULL значения в данной группе
    #39983528
Cristiano_Rivaldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT
    t.*,
    COALESCE(t.text, b.text) AS bef
FROM my_table t
    LEFT JOIN LATERAL (SELECT
                           g.text
                       FROM my_table g
                       WHERE g.id = t.id
                         AND g.partition_id < t.partition_id
                         AND g.text IS NOT NULL
                       ORDER BY
                           g.partition_id DESC
                       LIMIT 1 ) b
              ON TRUE
...
Рейтинг: 0 / 0
Поиск предыдущего NOT NULL значения в данной группе
    #39990334
Murderface_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cristiano_Rivaldo, спасибо большое! Теперь знаю как правильно LATERAL использовать.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Поиск предыдущего NOT NULL значения в данной группе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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