Учитывая следующую таблицу:
id (desc) | amount
------------------
9 | 3
8 | 2
7 | 1 <- RETURN THIS ROW
6 | 0
5 | 1
4 | 0
3 | 2
2 | 1
1 | 0
Мне нужно вернуть только одну строку - ту, что с id 7
Правила: - самая последняя запись имеет сумму больше 0 - должна возвращать строку после первого вхождения суммы 0
Таким образом, если у меня есть:
id (desc) | amount
------------------
4 | 0
3 | 0
2 | 1
1 | 0
Он не будет показывать ни одной строки.
1 ответ
Вы можете использовать оконные функции:
select t.*
from (select t.*,
max(case when amount = 0 then id end) over () as last_0_id
from t
) t
where id > last_0_id
order by id asc
limit 1;
Или без оконных функций:
select t.*
from t join
(select max(t2.id) as id
from t t2
where t2.amount = 0
) t2
on t.id > t2.id
order by id asc
limit 1;
Вот скрипт <>db
На самом деле это, вероятно, быстрее, чем использование lead()
.
Похожие вопросы
Новые вопросы
mysql
MySQL — это бесплатная система управления реляционными базами данных (RDBMS) с открытым исходным кодом, которая использует язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. д. Это разные БД, которые используют свои собственные диалекты SQL для управления данными. В вопросе всегда указывайте точную версию сервера. Версии 5.x сильно отличаются по своим возможностям от версий 8+.