Как сгруппировать значения до нулевых значений в поле?

Есть таблица card_info:

Клиент Дата Баланс
1   01.03.2010 150
1   02.03.2010 100
1   03.03.2010 200
1   04.03.2010 0
1   05.03.2010 50
1   06.03.2010 0
2   16.03.2010 1000
2   17.03.2010 0

Для каждого клиента нужно вывести все периоды, где баланс отличен от нуля и средний баланс

Должна получиться такая табличка:

Клиент Дата1 дата2 Баланс
1   01.03.2010 03.03.2010 150
1   05.03.2010 05.03.2010 50
2   16.03.2010 16.03.2010 1000

Не понимаю как остановиться в группировке на 0, знаю про функцию lead для partition by которая показывает следующий элемент, но как она поможет распознать до куда группировать пока непонятно. Буду рад любой подсказке)


Ответы (1 шт):

Автор решения: Akina

Диалект не указан - даю решение для MySQL.

WITH cte AS ( SELECT *, SUM(NOT Balance) OVER (PARTITION BY Client ORDER BY `Date`) grp
              FROM test )
SELECT Client,
       MIN(`Date`) Date1,
       MAX(`Date`) Date2,
       AVG(Balance) Balance
FROM cte 
WHERE Balance
GROUP BY Client, grp
ORDER BY Client, grp;

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=64b5f67ef7cf5baee90fce34d97c37ac

→ Ссылка