Извлечение итоговой суммы за период времени записей во внешней таблице для каждой записи в таблице - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть таблица group и таблица members. A group имеет много members. Одна запись member может принадлежать одной записи group. Таблица members имеет внешний ключ / столбец group_id.

groups
+---------+---------+
|  id     |  name   |
+---------+---------+
| 1       | group01 |
+---------+---------+
members
+----+---------+------------+
| id | groupid | created_at |
+----+---------+------------+
|  9 |       1 | 2020-03-05 |
+----+---------+------------+

Мне нужно получить для каждой записи в таблице groups промежуточное количество ее членов за определенное время.

Вот пример того, что в итоге данные должны выглядеть, чтобы сделать это более ясным.

[
 { group: 'group01', count: 3, date: '2020-01-05' },
 { group: 'group01', count: 10, date: '2020-01-12' },
 { group: 'group01', count: 14, date: '2020-02-02' },
 { group: 'group02', count: 5, date: '2020-01-02' },
 { group: 'group02', count: 13, date: '2020-01-23' },
 { group: 'group02', count: 23, date: '2020-01-28' },
 ...
]

Кто-нибудь знает, как это можно сделать?

1 Ответ

1 голос
/ 15 апреля 2020

В MySQL 8.0 вы можете просто использовать оконные функции для этого. Вы можете получить информацию, даже не взглянув на таблицу groups:

select
    m.group_id,
    count(*) over(partition by g.group_id order by date) cnt,
    m.date
from members m

Или, если вам нужны данные, которые доступны в groups, но отсутствуют в members (скажем, название группы):

select
    g.group_name,
    count(*) over(partition by g.group_id order by date) cnt,
    m.date
from members m
inner join groups g on g.group_id = m.group_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...