SQL: Как запросить значение в max datetime в каждом идентификаторе и заполнить нулевое значение предыдущим значением - PullRequest
0 голосов
/ 23 октября 2019

У меня есть данные в моей таблице.

enter image description here

Мне нужен текущий баланс для каждого идентификатора на каждый день (предыдущее доступное значение).

Как написать такой запрос SQL, чтобы получить вывод ниже. enter image description here

1 Ответ

1 голос
/ 23 октября 2019

Ваш вопрос немного сбивает с толку, потому что два набора данных выглядят так, как будто они имеют приблизительно одинаковые строки, но различаются.

Один из способов получить то, что вы хотите, - использовать cross join для генерациистроки, а затем подзапрос для баланса:

select d.dte, i.id,
       (select t2.after_balance
        from t t2
        where cast(t2.create_time as date) <= d.dte and
              t2.id = i.id
        order by t2.create_time desc
        limit 1  -- fetch first 1 row only
       ) as balance
from (select distinct cast(create_time as date) as dte
      from t
     ) d cross join
     (select distinct id
      from t
     ) i
order by d.dte, i.id;

Используется стандартный / общий SQL. Некоторые функции могут быть по-разному выражены в используемой вами базе данных.

...