Как сгруппировать значения до нулевых значений в поле?
Есть таблица 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