(Я уже задавал подобный вопрос раньше, но я все испортил. Надеюсь, на этот раз я смогу выразить себя лучше.) У меня есть таблица, содержащая записи, которые меняются со временем, каждая строка ...

1
大朱雀 3 Мар 2021 в 16:01

1 ответ

Лучший ответ

По сути, вам, кажется, нужно самое последнее значение для каждого идентификатора - и оно учитывается только для самого последнего этапа.

Вы можете получить это, используя такую ​​формулировку:

select d.DateDay, s.stage, coalesce(sh.amount, 0)
from (select distinct sh.DateDay from stage_history sh) d cross join
     (select distinct sh.stage from stage_history sh) s left join lateral
     (select sum(sh.amount) as amount
      from (select distinct on (sh.id) sh.*
            from stage_history sh
            where sh.DateDay <= d.DateDay 
            order by sh.id, sh.DateDay desc
           ) sh
      where sh.stage = s.stage
     ) sh
     on 1=1
order by d.DateDay, s.stage;

Вот скрипка db <>.

1
Gordon Linoff 3 Мар 2021 в 13:14