Предыдущая запись до первого нуля SQL - PullRequest
0 голосов
/ 17 апреля 2020

с учетом следующей таблицы:

id (desc) | amount
------------------
9         | 3 
8         | 2
7         | 1 <- RETURN THIS ROW
6         | 0
5         | 1
4         | 0
3         | 2
2         | 1
1         | 0

Мне нужно вернуть только одну строку - ту, которая с идентификатором 7

Правила: - самая последняя запись имеет сумму больше 0 - должен вернуть строку после первой суммы 0 вхождений

Таким образом, если у меня есть:

id (desc) | amount
------------------
4         | 0
3         | 0
2         | 1
1         | 0

Это не будет показывать ни одной строки.

1 Ответ

0 голосов
/ 17 апреля 2020

Вы можете использовать оконные функции:

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(), на самом деле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...