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

如何用SQL获取指定日期所属组的前两组及日期范围

问题描述

分组日期范围

  • 需要确定21-jan-2022所属的分组,再获取该分组之前的最后两个分组及其日期范围
  • 示例:21-Jan-22属于G4,需提取G2和G3的日期范围
  • 尝试过cross join、分析函数、子查询,仍无法实现提取前两组的需求
解决方案

假设你的分组表名为date_groups,包含group_name(分组名)、start_date(开始日期)、end_date(结束日期)字段,可通过以下SQL实现需求:

WITH target_group AS (
    -- 定位目标日期所属分组,并按日期给分组排序
    SELECT 
        group_name,
        ROW_NUMBER() OVER (ORDER BY start_date) AS group_rank
    FROM date_groups
    WHERE TO_DATE('21-jan-2022', 'DD-mon-YYYY') BETWEEN start_date AND end_date
),
all_ranked_groups AS (
    -- 给所有分组按日期排序生成排名
    SELECT 
        group_name,
        start_date,
        end_date,
        ROW_NUMBER() OVER (ORDER BY start_date) AS group_rank
    FROM date_groups
)
-- 筛选目标分组排名减1、减2的两组数据
SELECT 
    group_name,
    start_date,
    end_date
FROM all_ranked_groups
JOIN target_group ON all_ranked_groups.group_rank IN (target_group.group_rank - 1, target_group.group_rank - 2)
ORDER BY all_ranked_groups.group_rank;

逻辑说明:

  • 用ROW_NUMBER()按开始日期给分组排序,确保分组的先后顺序符合时间逻辑
  • 先找到目标日期所在分组的排名,再筛选出排名比它小1和小2的分组,即为目标分组之前的最后两个分组
  • 如果分组是按G1、G2这类命名顺序排序,把ORDER BY start_date替换为ORDER BY group_name即可,可根据实际表结构调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:02:50