

新闻资讯
技术学院mysql中按组计算排除最新记录后其他记录和
问题:给定包含时间和类型的以下数据表:
create table c (
time timestamp,
type varchar(255),
num int
);
insert into c values
('2025-01-01 00:00:00', 'a', 10),
('2025-01-01 00:00:00', 'b', 12),
('2025-01-02 00:00:00', 'a', 15),
('2025-01-02 00:00:00', 'b', 18),
('2025-01-03 00:00:00', 'a', 20),
('2025-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此查询包含以下步骤:
)函数为每个type中的记录分配一个基于按时间降序排序的序列号。