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

如何查询每个客户对应最大行号的行数据

解决方法

你当前的查询逻辑已经接近需求,仅需要在外层增加行号筛选逻辑即可,常用实现方案有两种:

方案1:调整窗口排序规则直接取首条

将窗口函数的排序规则改为日期倒序,此时每个客户分组下最新的记录行号为1,直接筛选行号等于1的记录即可:

SELECT name, `order id`, date
FROM (
    SELECT 
        name, 
        `order id`, 
        date,
        ROW_NUMBER() OVER (PARTITION BY name ORDER BY date DESC) AS rn
    FROM `table`
) t
WHERE rn = 1;

方案2:保留原升序逻辑,匹配每组最大行号

如果需要保留你原有按日期升序编号的逻辑,可以先计算每个客户对应的最大行号,再关联匹配得到对应记录:

WITH base_data AS (
    SELECT 
        name, 
        `order id`, 
        date,
        ROW_NUMBER () OVER (PARTITION BY name ORDER BY date) AS rn
    FROM `table`
),
group_max_rn AS (
    SELECT name, MAX(rn) AS max_rn
    FROM base_data
    GROUP BY name
)
SELECT b.name, b.`order id`, b.date
FROM base_data b
INNER JOIN group_max_rn g 
    ON b.name = g.name AND b.rn = g.max_rn;

注意事项

  • 你原查询中窗口函数的分区规则是PARTITION BY name,order id,即按「客户+订单ID」分组排序,如果你实际需要的是这个维度下每组的最大行号记录,只需把上面SQL中PARTITION BY后的参数替换为name, order id``即可
  • 带空格的字段名、和SQL保留字重名的表名/字段名(如本例中的order id、table)需要用反引号包裹,避免执行时报语法错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:45:03