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

按国家查询月度收入总和最大值及对应创纪录月份技术问询

解决方案:找出每个国家的创纪录收入月份

看来你已经有了基础的月度收入统计SQL,现在需要升级它来定位每个国家收入最高的那个月份对吧?我来帮你调整一下,这里可以用窗口函数ROW_NUMBER()或者RANK()来实现,具体选哪个取决于你想怎么处理并列最高收入的情况(比如一个国家有多个月份收入相同且都是峰值)。

优化后的完整SQL语句

WITH MonthlyCountryRevenue AS (
    SELECT 
        d.calendar_year_month AS Record_month,
        c.country_name AS country,
        SUM(Net_qty*(unit_charge+unit_shipping_charge)) AS Revenue
    FROM sensu_reporting.commercial_analysts.customer_science_transactions CST (nolock)
    JOIN Sensu.dbo.Country_D C (nolock) ON cst.country_code = c.Country_Code
    JOIN sensu.dbo.Date_D d (nolock) ON cst.Order_Date_Key = d.Date_Key
    -- 补全你原SQL中未写完的WHERE条件,比如 cst.some_status = 'valid'
    WHERE cst.si...
    GROUP BY d.calendar_year_month, c.country_name
),
RankedRevenue AS (
    SELECT 
        Record_month,
        country,
        Revenue,
        -- 按国家分组,收入降序排名:
        -- 用RANK()会保留所有并列最高的月份;用ROW_NUMBER()则只取任意一个最高月
        RANK() OVER (PARTITION BY country ORDER BY Revenue DESC) AS RevenueRank
    FROM MonthlyCountryRevenue
)
SELECT 
    country,
    Record_month AS Record_Revenue_Month,
    Revenue AS Highest_Monthly_Revenue
FROM RankedRevenue
WHERE RevenueRank = 1;

关键逻辑解释

  • 第一个CTE MonthlyCountryRevenue: 复用你原有的查询逻辑,先按「国家+月份」分组计算每个月的总收入,确保基础统计数据准确。
  • 第二个CTE RankedRevenue: 用窗口函数实现分组排序:
    • PARTITION BY country:确保只在同一个国家内部对月度收入排序
    • ORDER BY Revenue DESC:让收入最高的月份排在最前面,获得排名1
    • 如果你希望一个国家有多个并列最高收入的月份都被展示,就用RANK();如果只需要任意取一个最高月,换成ROW_NUMBER()即可。
  • 最终查询: 筛选出排名为1的记录,就是每个国家的创纪录收入月份和对应收入值。

小提示

  • 记得把原SQL里未写完的WHERE cst.si...条件补全到第一个CTE的WHERE子句中,避免遗漏数据过滤规则。
  • 使用(nolock)提示要谨慎:它会读取未提交的事务数据,可能导致脏读,如果对数据准确性要求极高,建议权衡是否保留这个提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:30:10