Как посчитать running total с условием для каждого uid отдельно?

Пользователи покупают отрезки времени. Например, каждая покупка это 10 дней (подряд) платной услуги.
Есть таблица оплат: id записи, uid пользователя, и dt время, когда оплатили (оплата начинает действовать тут же).

Например, тут это в днях.
id  uid  dt
1   10    0 
2   10    9
3   20   10
4   30   15
5   10   25 
6   10   26
7   10   27

Если оплаченные интервалы накладываются, они суммируются. Например у юзера №10 после оплат в 0 и в 9 (каждая длиной 10), конец оплаты в 20. Потом "дырка" до 25 и в 25 и чуть позже три подряд оплаты, дающие в сумме период до 55.

Как одним запросом получить сроки окончания для всех юзеров в таблице?
uid  paid_till
10   55 
20   20
30   25


В запросе для единственного пользователя делал с переменной, которую обновлял на
@paid_till := 10 + GREATEST(IF(@paid_till is null, 0, @paid_till), dt)

Не могу сообразить, как инициализировать такую переменную для каждого нового uid и всё это в одном запросе.

SQL fiddle
  • Вопрос задан
  • 50 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы