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

如何简化Spark SQL语句实现开放ST(ST后无RW任务)分类?

简洁实现方案

可以直接通过窗口函数替代原有衍生列的逻辑,直接在CASE WHEN中判断当前ST任务之后是否存在任何RW任务,避免提前生成冗余列,同时逻辑更准确(原有逻辑仅判断下一个任务是否为RW,无法覆盖后续多个任务的场景):

SELECT
    *,
    CASE
        WHEN code_task = 'ST' 
             AND lastvalue = 'CR' 
             -- 判断当前item分区内,当前任务之后是否没有任何RW任务
             AND MAX(CASE WHEN code_task LIKE '%RW%' THEN 1 ELSE 0 END) 
                 OVER (PARTITION BY item ORDER BY task_time ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) = 0
        THEN 'ST'
    END AS `Open ST`
FROM your_table

逻辑说明

  • 窗口函数MAX(CASE WHEN code_task LIKE '%RW%' THEN 1 ELSE 0 END)会在每个item的分区内,从当前任务开始到最后一个任务的范围内,检查是否存在RW任务:
    • 如果存在,返回1;如果不存在,返回0
  • 仅当当前任务是ST、lastvalue为CR,且后续无任何RW任务时,标记为Open ST

如果你的分区排序依赖的不是task_time,替换为实际的任务顺序字段即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:35:40