Основываясь на предыдущих записях, поля стоп-суммы

У меня есть такая таблица:

      |id |   date     | point |
+---+------------+-------+
| 6 | 2022/01/06 |   9   |
| 5 | 2022/01/05 |   7   |
| 4 | 2022/01/04 |   1   |
| 3 | 2022/01/03 |   4   |
| 2 | 2022/01/02 |   6   |
| 1 | 2022/01/01 |   1   |

Моя цель - получить points от даты сейчас до даты, когда точка больше, чем равна 1, и остановите сумму полей до этой даты.

В приведенном выше примере (сортировка по дате) ответом является текущая дата баллов ( 2022/01/06) к дате 2022/01/04 и равно 9 + 7 + 1 = 17. Поскольку стоимость пункта на дату 2022/01/03 равно 4, поэтому не рассчитывается в sum.

Я читал о CTE и Window Functoin , однако мне не удалось их правильно реализовать.

1 ответ

  1. Найдите первую строку до (и включая) желаемой даты, значение точки которой равно 1.
  2. Суммируйте это и все, что новее, до (включительно) желаемой даты.
      select sum(point)
from points
where date between (
  select "date"
  from points
  where point = 1 and date <= '2022/01/06'
  order by "date" desc
  limit 1
) and '2022/01/06';

Демонстрация

Другие вопросы по тегам