我有一个表group
和一个表members
。一个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' },
...
]
有人知道怎么做吗?
在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