MySQL 中如何按组计算排除最新记录后其他记录的数值总和?
mysql中按组计算排除最新记录后其他记录和
问题:给定包含时间和类型的以下数据表:
create table c ( time timestamp, type varchar(255), num int ); insert into c values ('2023-01-01 00:00:00', 'a', 10), ('2023-01-01 00:00:00', 'b', 12), ('2023-01-02 00:00:00', 'a', 15), ('2023-01-02 00:00:00', 'b', 18), ('2023-01-03 00:00:00', 'a', 20), ('2023-01-03 00:00:00', 'b', 22);
如何写一个mysql查询,按type分组,计算排除最新一条记录后其余记录num值的总和?
解答:
SELECT t.type, SUM(t.num) FROM ( SELECT type, num, ROW_NUMBER() OVER (PARTITION BY type ORDER BY time DESC ) AS row_num FROM C ) t WHERE t.row_num != 1 GROUP BY t.type
此查询包含以下步骤:
- 使用row_number()函数为每个type中的记录分配一个基于按时间降序排序的序列号。
- 使用子查询创建临时表t,其中包含类型、数字和其他列(如原始表中不存在的row_num)。
- 从t表中选择最新的记录(row_num不等于1),即排除最新记录。
- 按type分组并计算num的总和。
以上就是MySQL 中如何按组计算排除最新记录后其他记录的数值总和?的详细内容,更多请关注其它相关文章!