@GrandinaWi

Можно ли написать sql запрос на вывода последнего элемента?

Всем привет. Разбираюсь с базой данных. Есть таблица в нем элементы заполнены пропусками в некоторых строках. Можно ли написать запрос чтоб, выводился последний существующий элемент столбца.
60927cffdb140490691073.png
Вот пример. Мне нужно получить текст Logo с id = 19 и текст "ulitsa" с id=23.
  • Вопрос задан
  • 62 просмотра
Решения вопроса 1
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
Попробуйте так:
select 
	max_col1,
	t1.col1,
	max_col2,
	t2.col2
from (
select 
	max(if(col1 is null, 0, id)) max_col1,
	max(if(col2 is null, 0, id)) max_col2
from test) last_values
join test t1 on t1.id = max_col1
join test t2 on t2.id = max_col2;


MySQL online

+==========+======+==========+========+
| max_col1 | col1 | max_col2 | col2   |
+==========+======+==========+========+
| 19       | logo | 23       | ulitsa |
+----------+------+----------+--------+
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Akina
Сетевой и системный админ, SQL-программист.
SELECT DISTINCT
       FIRST_VALUE(column_1) OVER (ORDER BY column_1 IS NULL, id DESC) column_1,
       FIRST_VALUE(column_2) OVER (ORDER BY column_2 IS NULL, id DESC) column_2
FROM test;

Если в "пустых" полях не NULL, а пустые строки, то соответственно
SELECT DISTINCT
       FIRST_VALUE(column_1) OVER (ORDER BY column_1 = ' ', id DESC) column_1,
       FIRST_VALUE(column_2) OVER (ORDER BY column_2 = ' ', id DESC) column_2
FROM test;

fiddle

Требуется MySQL версии 8+.
Ответ написан
@parallel47adm
Не знаю как в mysql, в postgres так:
select id,columnname from tablename where columnname is not null order by id desc limit 1;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы