В настоящее время у меня есть следующая модель для ввода:
+---------+-----------+---------+---------+--------+
| user_id | date | program | type | more |
+---------+-----------+---------+---------+--------+
| 1 | 23-Mar-15 | AAA | init | |
| 1 | 21-May-15 | AAA | 1/3 | |
| 1 | 22-Sep-15 | AAA | 1/3 | |
| 1 | 20-Mar-16 | AAA | 1/3 | |
| 1 | 12-Aug-16 | CCC | init | |
| 1 | 27-Jun-18 | CCC | init | refund |
| 2 | 16-May-16 | BBB | init | |
| 2 | 12-Aug-16 | BBB | full | |
| 2 | 15-Mar-17 | AAA | 1/3 | |
| 2 | 21-Jun-17 | AAA | 1/3 | refund |
| 3 | 24-May-18 | BBB | init | |
| 3 | 27-May-18 | BBB | 1/3 | |
| 3 | 27-Jun-18 | BBB | 2/3 | |
| 4 | 27-Jun-18 | AAA | init | |
| 5 | 27-Jun-18 | AAA | 1/3 | |
| 5 | 27-Jun-18 | AAA | 1/3 | |
+---------+-----------+---------+---------+--------+
Результат, который я ищу:
+---------+----------+------------+
| user_id | programs | aggregated |
+---------+----------+------------+
| 1 | AAA | full |
| 1 | CCC | refund |
| 2 | BBB | full |
| 2 | AAA | refund |
| 3 | BBB | 2/3 |
| 4 | AAA | init |
| 5 | AAA | 2/3 |
+---------+----------+------------+
Я ищу совет о том, как создать таблицу ввода, которая будетвозможность получить запрошенный результат.В предыдущих итерациях у меня было десятки различных опций для каждой программы, но я нашел этот подход совершенно бесполезным.Поэтому я значительно упростил возможные типы программ.Но все же я не вижу, как я мог бы объединить данные, используя этот вход.Если я слишком глуп, чтобы увидеть, что уже возможно получить искомый результат из существующего ввода, пожалуйста, укажите мне направление.
Вопрос TL: DR - агрегация, которую я ищу, возможна / жизнеспособна, используямоя текущая таблица ввода в MySQL?- если нет, какую модификацию вы бы посоветовали в моей таблице ввода?- если да, просьба указать мне правильное направление.
РЕДАКТИРОВАТЬ
Попытаться описать логику более подробно:
каждый пользователь может иметь несколькопрограммы
каждая программа может быть получена пользователем в виде частей, представленных в столбце типа.
программа AAA имеет только следующие параметры ввода init, 1/2, 1/3 или полная возможность вэтот ряд (я не имею на это никакого влияния).
другие программы имеют: 1/2, 2/2, 1/3, 2/3, 3/3, полное, init
каждая программа может иметь один из следующих типов состояний как результат : инициализация, 1/2, 1/3, 2/3, полное, возврат
псевдокод:
For every program that user has:
If there is only one type for a program then result = that type.
If there is more than one type of program:
check if there are any refund
if every program type has refund, then result = refund
if there are program type without refund, result = aggregated
if there are no refunds, then result = aggregated