You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中如何计算指定日期范围下各companyAccountId分组最后一行的字段总和

实现方案

方案1:MySQL 8.0+ 支持窗口函数版本(推荐)

核心逻辑是用ROW_NUMBER()窗口函数给每个企业账户的记录按时间倒序、id倒序排序,取每个组排名第一的最新记录后聚合求和。

SELECT 
  SUM(totalVan) AS totalVanSum,
  SUM(totalBike) AS totalBikeSum
FROM (
  SELECT 
    companyAccountId,
    totalVan,
    totalBike,
    ROW_NUMBER() OVER (
      PARTITION BY companyAccountId 
      ORDER BY `date` DESC, id DESC
    ) AS row_num
  FROM vehicle_assignment_history
  -- 替换为你实际的查询日期范围
  WHERE `date` BETWEEN '2021-11-11 00:00:00' AND '2021-11-13 23:59:59'
) t
WHERE row_num = 1;

方案2:MySQL 5.x 低版本兼容写法

通过子查询先拿到每个企业账户在指定日期范围内的最新记录id,再关联原表取字段求和。

SELECT 
  SUM(v.totalVan) AS totalVanSum,
  SUM(v.totalBike) AS totalBikeSum
FROM vehicle_assignment_history v
INNER JOIN (
  SELECT 
    companyAccountId,
    MAX(id) AS latest_id
  FROM vehicle_assignment_history
  WHERE `date` BETWEEN '2021-11-11 00:00:00' AND '2021-11-13 23:59:59'
  GROUP BY companyAccountId
) t ON v.id = t.latest_id;

说明

  1. 表中id为自增主键,同日期下id越大代表记录越新,所以排序规则用date DESC, id DESC可以保证拿到每个企业的最新记录,如果你有其他判断最新记录的规则可以自行调整排序逻辑。
  2. 日期过滤条件需要注意边界值,比如查询到2021-11-13的话,建议写<= '2021-11-13 23:59:59'避免漏掉13号当天非0点的记录。
  3. 替换代码中的日期范围即可得到对应结果,和你给出的示例完全匹配。

内容的提问来源于stack exchange,提问作者Akash Kumar Verma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 18:36:06