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

基于另一列值从同一列查询日期的SQL实现方案

实现任务基准日期列的方案

需求梳理

  • 任务表(TASK):[Task Key]为主键,[Task Type]用于同类任务分组,包含[Task Name]、[Task Date]字段
  • 类别表(CATEGORY):通过[Task Key]关联,标记任务类型为Current、Baseline或Snapshot
  • 目标:生成新表,为每个任务新增基准日期列,即对应同[Task Type]下Baseline类型任务的[Task Date]

实现思路

通过关联两张表后,结合窗口函数的条件聚合,按[Task Type]分组提取组内Baseline任务的日期,作为该组所有任务的基准日期。

基础实现SQL代码

SELECT
    ta.[Task Key],
    ta.[Task Type],
    ta.[Task Name],
    ta.[Task Date],
    ca.[Category Type], -- 保留类别类型方便验证结果
    -- 按任务类型分组,提取组内Baseline类型的任务日期作为基准日期
    MAX(CASE WHEN ca.[Category Type] = 'Baseline' THEN ta.[Task Date] END) OVER (PARTITION BY ta.[Task Type]) AS [基准日期]
INTO 新任务表 -- 替换为你需要创建的新表名称
FROM
    TASK ta
LEFT JOIN
    CATEGORY ca
ON
    ta.[Task Key] = ca.[Task Key]

代码说明

  • PARTITION BY ta.[Task Type]:限定仅在相同任务类型的组内查找基准日期
  • MAX(CASE WHEN ca.[Category Type] = 'Baseline' THEN ta.[Task Date] END):筛选组内Baseline类型的任务日期,用MAX(或MIN,若同组仅一个Baseline)提取该值,作为组内所有任务的基准日期
  • INTO 新任务表:直接将查询结果写入新表,若需覆盖已有表可先执行DROP TABLE IF EXISTS 新任务表

多Baseline场景处理

如果同个[Task Type]下存在多个Baseline任务,可通过窗口函数筛选出指定的基准日期(例如最早/最晚的):

WITH BaselineTasks AS (
    SELECT
        [Task Type],
        [Task Date]
    FROM (
        SELECT
            ta.[Task Type],
            ta.[Task Date],
            -- 按日期排序取最早的Baseline,取最晚则改为ORDER BY ta.[Task Date] DESC
            ROW_NUMBER() OVER (PARTITION BY ta.[Task Type] ORDER BY ta.[Task Date]) AS rn
        FROM TASK ta
        JOIN CATEGORY ca ON ta.[Task Key] = ca.[Task Key]
        WHERE ca.[Category Type] = 'Baseline'
    ) t
    WHERE rn = 1
)
SELECT
    ta.[Task Key],
    ta.[Task Type],
    ta.[Task Name],
    ta.[Task Date],
    ca.[Category Type],
    bt.[Task Date] AS [基准日期]
INTO 新任务表
FROM TASK ta
LEFT JOIN CATEGORY ca ON ta.[Task Key] = ca.[Task Key]
LEFT JOIN BaselineTasks bt ON ta.[Task Type] = bt.[Task Type]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 14:10:06