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

使用Oracle MATCH_RECOGNIZE提取满足前置日期条件的分区数据

S1 P1 21/09/2022
S1 P2 20/09/2022
S1 P1 19/09/2022
S2 P1 21/09/2022
S2 P2 19/09/2022
S2 P1 19/09/2022

## 预期输出

SPLIT PART DATE OUTPUT

S1 P1 21/09/2022 X
S1 P2 20/09/2022 NULL
S1 P1 19/09/2022 NULL
S2 P1 21/09/2022 NULL
S2 P2 19/09/2022 NULL
S2 P1 19/09/2022 NULL

## 解决方案
### 方法1:关联子查询实现
通过`EXISTS`子查询直接检查同分区内是否存在符合条件的P2记录:
```sql
SELECT 
    SPLIT,
    PART,
    DATE,
    CASE
        WHEN PART = 'P1'
             AND EXISTS (
                 SELECT 1
                 FROM your_table t2
                 WHERE t2.SPLIT = t.SPLIT
                       AND t2.PART = 'P2'
                       AND t2.DATE = DATE_SUB(t.DATE, INTERVAL 1 DAY)
             ) THEN 'X'
        ELSE NULL
    END AS OUTPUT
FROM your_table t
ORDER BY SPLIT, DATE DESC;

方法2:窗口函数辅助判断

先在分区内提取所有P2的日期集合,再匹配当前P1记录的前一天日期:

SELECT 
    SPLIT,
    PART,
    DATE,
    CASE
        WHEN PART = 'P1'
             AND DATE_SUB(DATE, INTERVAL 1 DAY) IN (
                 SELECT DATE
                 FROM your_table t2
                 WHERE t2.SPLIT = t.SPLIT AND t2.PART = 'P2'
             ) THEN 'X'
        ELSE NULL
    END AS OUTPUT
FROM your_table t
ORDER BY SPLIT, DATE DESC;

注:日期计算函数需适配对应数据库,比如PostgreSQL用DATE - INTERVAL '1 day',SQL Server用DATEADD(day, -1, DATE)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:15:41