【问题标题】:Retrieve running total over time of records in foreign table for each record in table检索表中每条记录的外部表中记录的运行总数
【发布时间】:2020-04-15 18:36:12
【问题描述】:

我有一张桌子group 和一张桌子membersgroup 有很多 members。单个member 记录可以属于单个groupmembers 表有一个外键/列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 sql join count window-functions


    【解决方案1】:

    在 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
    

    【讨论】:

      猜你喜欢
      • 2015-01-26
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2011-10-12
      • 1970-01-01
      • 1970-01-01
      • 2015-03-11
      • 2017-04-09
      相关资源
      最近更新 更多