MySQL 中如何按組計算排除最新記錄后其他記錄的數值總和?

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

此查詢包含以下步驟:

  1. 使用row_number()函數為每個type中的記錄分配一個基于按時間降序排序的序列號。
  2. 使用子查詢創建臨時表t,其中包含類型、數字和其他列(如原始表中不存在的row_num)。
  3. 從t表中選擇最新的記錄(row_num不等于1),即排除最新記錄。
  4. 按type分組并計算num的總和。

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享