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

如何编写SQL查询仅汇总关联子表最新10条记录的求和值

解决方案

要实现仅对每个tablea关联的tableb中最新10条记录(按date降序)的value求和,可以通过窗口函数筛选目标记录后再聚合,修改后的查询如下:

SELECT a.name, SUM(b.value) AS V
FROM tablea a
INNER JOIN (
    -- 给每个tableAID对应的记录按date降序编号
    SELECT tableAID, value,
           ROW_NUMBER() OVER (PARTITION BY tableAID ORDER BY date DESC) AS rn
    FROM tableb
) b ON a.ID = b.tableAID
-- 仅保留每组前10条最新记录
WHERE b.rn <= 10
GROUP BY a.name

关键逻辑说明

  • 子查询中使用ROW_NUMBER()窗口函数,按tableAID分组,每组内按date倒序为记录分配序号,最新的记录序号为1,依次递增。
  • 通过WHERE b.rn <= 10筛选出每个tablea对应的最新10条tableb记录,再与tablea关联后对value求和。

如果需要列出所有tablea记录(即使没有匹配的tableb数据),可以改用LEFT JOIN并调整条件位置,确保无关联数据时求和结果显示为0:

SELECT a.name, ISNULL(SUM(b.value), 0) AS V
FROM tablea a
LEFT JOIN (
    SELECT tableAID, value,
           ROW_NUMBER() OVER (PARTITION BY tableAID ORDER BY date DESC) AS rn
    FROM tableb
) b ON a.ID = b.tableAID AND b.rn <= 10
GROUP BY a.name

内容的提问来源于stack exchange,提问作者Mark Homer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 06:24:25