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

如何不使用CTE获取用户累计分数达标0.05的最早日期?

无需CTE实现累计达标日期查询

需求说明

有一张包含user_id、order_id、creation_date、fractions、name字段的表,需要为每个user_id获取其累计fractions达到至少0.05的最小creation_date。

非CTE实现方案

可以直接用子查询结合窗口函数完成,核心是先计算用户按时间排序后的累计分数,再筛选首次达标记录的最早日期:

基础版(仅返回用户ID和达标日期)

SELECT user_id, MIN(creation_date) AS min_reach_date
FROM (
    SELECT 
        user_id,
        creation_date,
        SUM(fractions) OVER (PARTITION BY user_id ORDER BY creation_date) AS cumulative_fractions
    FROM your_table_name
) AS sub_query
WHERE cumulative_fractions >= 0.05
GROUP BY user_id;

逻辑拆解

  • 内层子查询:通过SUM() OVER (PARTITION BY user_id ORDER BY creation_date),按用户分组、日期排序计算累计分数,保证累加是按时间顺序进行的。
  • 外层查询:筛选出累计分数达标(≥0.05)的记录,再按用户分组取最小的creation_date,即为该用户首次达标最早的日期。

拓展版(返回达标日期对应完整订单信息)

如果需要同时获取达标日期对应的订单详情,可以用关联查询:

SELECT t.*
FROM your_table_name t
JOIN (
    SELECT 
        user_id,
        MIN(creation_date) AS min_reach_date
    FROM (
        SELECT 
            user_id,
            creation_date,
            SUM(fractions) OVER (PARTITION BY user_id ORDER BY creation_date) AS cumulative_fractions
        FROM your_table_name
    ) AS sub
    WHERE cumulative_fractions >= 0.05
    GROUP BY user_id
) AS reach_dates 
ON t.user_id = reach_dates.user_id AND t.creation_date = reach_dates.min_reach_date;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:55:26