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

如何从事务表中获取最新账单日期对应的ID、产品及营收组合

原SQL问题分析

你当前的写法将Id、product、product_category、Revenue四个字段全部作为分组维度,只要这四个字段的取值存在差异就会生成独立分组,因此会返回全量维度组合的查询结果,无法实现仅保留最新账单日期对应条目的需求。

调整方案

方案1:窗口函数法(适配MySQL8.0+、PostgreSQL、Hive、Spark SQL等所有支持窗口函数的主流数据库,推荐使用)

SELECT Id, product, product_category, Revenue, Billing_date
FROM (
    SELECT 
        Id, product, product_category, Revenue, Billing_date,
        -- 按需要的分组维度分区,账单日期倒序排序后最新记录排名为1
        ROW_NUMBER() OVER (PARTITION BY Id, product, product_category, Revenue ORDER BY Billing_date DESC) AS rn
    FROM Table1
) t
WHERE rn = 1;

如果不需要将Revenue作为分组维度,仅需要保留每个Id+product+product_category组合对应的最新记录,删除PARTITION BY中的Revenue字段即可。
如果同一分组下存在多条相同最新日期的记录需要全部保留,将ROW_NUMBER()替换为RANK()即可。

方案2:关联子查询法(适配不支持窗口函数的低版本数据库,比如MySQL5.x)

SELECT a.Id, a.product, a.product_category, a.Revenue, a.Billing_date
FROM Table1 a
INNER JOIN (
    SELECT Id, product, product_category, Revenue, MAX(Billing_date) AS max_date
    FROM Table1
    GROUP BY Id, product, product_category, Revenue
) b 
ON a.Id = b.Id 
AND a.product = b.product 
AND a.product_category = b.product_category 
AND a.Revenue = b.Revenue 
AND a.Billing_date = b.max_date;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 09:06:03