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

Teradata SQL中如何根据BEGINNING_DATE变化获取前序GRADE值

问题:按ID分组,根据BEGINNING_DATE变化获取前序GRADE值

原始数据

IDGRADEBEGINNING_DATEENDING_DATE
11214/06/202114/06/2022
11214/06/202114/06/2022
11422/03/202222/03/2023
11422/03/202222/03/2023
11522/03/202322/03/2024
11522/03/202322/03/2024
21315/01/202215/01/2023
21315/01/202215/01/2023
21701/09/202301/09/2024
21701/09/202301/09/2024

期望结果

按ID分组,当BEGINNING_DATE变化时获取前序GRADE值:

IDGRADEBEGINNING_DATEENDING_DATELAG_GRADE
11214/06/202114/06/2022?
11214/06/202114/06/2022?
11422/03/202222/03/202312
11422/03/202222/03/202312
11522/03/202322/03/202414
11522/03/202322/03/202414
21315/01/202215/01/2023?
21315/01/202215/01/2023?
21701/09/202301/09/202413
21701/09/202301/09/202413

尝试的SQL(未得到期望结果)

SELECT
A.*,
LAG(GRADE) OVER (PARTITION BY ID,BEGINNING_DATE ORDER BY ENDING_DATE) AS LAG_GRADE
FROM 
DATA A

解决方案

通过先提取每个ID和BEGINNING_DATE的唯一组合,计算该组合对应的前序GRADE,再关联回原始数据,即可得到所有重复行的对应前序值:

WITH DATA AS (
  SELECT DISTINCT
   ID,
   GRADE,
   BEGINNING_DATE
FROM
    grade_data
),
LAG_DATA AS (
SELECT
  D.*,
  LAG(D.GRADE) OVER (PARTITION BY D.ID ORDER BY D.BEGINNING_DATE ) AS LAG_GRADE
FROM
DATA D
)
SELECT 
  GRADE.*,
  LD.LAG_GRADE
FROM
grade_data GRADE
LEFT JOIN LAG_DATA LD ON GRADE.ID=LD.ID AND GRADE.BEGINNING_DATE = LD.BEGINNING_DATE

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 13:53:24