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

SQL季度末日期筛选:选取季度内最接近季末的记录

解决方案:筛选季度内最接近季度末的记录

针对你需要筛选每个季度内最接近季度末记录的需求,结合你已有的代码,这里提供基于窗口函数的实现方案,比子查询更简洁高效:

完整SQL代码

WITH quarter_data AS (
    SELECT
        created_at,
        account_id,
        account_name,
        Score,
        -- 计算当前记录所属季度的季度末日期
        DATEADD(day, -1, DATEADD(quarter, DATEDIFF(quarter, 0, created_at) + 1, 0)) AS quarterend,
        -- 计算记录日期到季度末的天数差(仅考虑季度内的记录,差值非负)
        DATEDIFF(day, created_at, DATEADD(day, -1, DATEADD(quarter, DATEDIFF(quarter, 0, created_at) + 1, 0))) AS days_to_quarterend
    FROM xyz.database
)
SELECT
    created_at,
    account_id,
    account_name,
    Score,
    quarterend
FROM quarter_data
WHERE 
    ROW_NUMBER() OVER (
        -- 按账户+所属季度分组
        PARTITION BY account_id, DATEDIFF(quarter, 0, created_at)
        -- 按到季度末的天数差升序(最小差值=最接近),同一天记录取最晚的
        ORDER BY days_to_quarterend ASC, created_at DESC
    ) = 1;

关键说明

  1. 修正原代码问题:将你代码中的d.Timestamp替换为created_at,保证字段引用一致。
  2. 分组逻辑:通过PARTITION BY account_id, DATEDIFF(quarter, 0, created_at)实现按「每个账户+每个季度」分组,确保每个分组内筛选该季度的目标记录。
  3. 排序规则:
    • 按days_to_quarterend升序排序,优先选择离季度末天数最少的记录;
    • 若存在同一天的重复记录,追加created_at DESC确保取最晚的(若无需区分可去掉)。
  4. 多记录保留:如果需要保留所有与季度末天数差相同的记录(比如多条记录同一天且都最接近季度末),将ROW_NUMBER()替换为RANK()即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:22:37