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的總和。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END