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

SQL技术问询:无需临时表,获取各产品累计净利润超10万的首次日期

无需临时表的简便实现方法

你可以直接用窗口函数结合条件聚合来实现,不需要创建临时表再关联,一步到位生成目标列。

核心思路

针对每个产品分组,筛选出累计净利润首次突破10万美元的日期——本质是取该产品所有满足Cumulative_Net_Income > 100000的记录中的最小日期,通过窗口函数直接将这个值作为新列附加到每一行。

完整SQL语句

SELECT 
    Product,
    Date,
    Net_Income,
    Cumulative_Net_Income,
    -- 针对每个产品,取满足条件的最小日期(首次突破日期)
    MIN(CASE WHEN CAST(REPLACE(Cumulative_Net_Income, ',', '') AS DECIMAL(18,2)) > 100000 THEN Date END) 
        OVER (PARTITION BY Product) AS First_100k_Date
FROM Your_Table;

关键细节说明

  1. 处理带逗号的数值字符串:你的原语句中用了'100,000'字符串比较,这容易导致排序错误(比如字符串'99,999'会被认为比'100,000'大),所以先用REPLACE去掉逗号,再转成数值类型DECIMAL后比较。
  2. 窗口函数的作用:PARTITION BY Product确保我们只在同一个产品的范围内计算最小日期;MIN()会自动忽略不满足条件的NULL值,最终返回该产品首次突破的日期。
  3. 兼容未突破的产品:如果某个产品从未达到10万美元累计净利润,First_100k_Date会显示NULL,无需额外处理。

简化版(如果Cumulative_Net_Income是数值类型)

如果你的Cumulative_Net_Income本身就是数值类型(而非带逗号的字符串),可以简化为:

SELECT 
    Product,
    Date,
    Net_Income,
    Cumulative_Net_Income,
    MIN(CASE WHEN Cumulative_Net_Income > 100000 THEN Date END) 
        OVER (PARTITION BY Product) AS First_100k_Date
FROM Your_Table;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:35:20