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

基于前一行值筛选:能否用单条SQL实现prop从4到5的实体筛选?

用单条SQL筛选prop从4变更为5的实体

当然可以用单条SQL优雅实现这个需求!核心思路是利用**窗口函数LAG()**追踪每个实体按时间排序后的上一条属性值,直接筛选出符合条件的记录即可。

基础实现(仅获取符合条件的实体)

SELECT DISTINCT entity
FROM (
    SELECT 
        entity,
        prop,
        -- 按entity分组、dt升序,获取当前记录的上一条prop值
        LAG(prop) OVER (PARTITION BY entity ORDER BY dt) AS previous_prop
    FROM T1
) AS entity_prop_history
-- 筛选"当前prop为5,且上一条prop为4"的变更记录
WHERE prop = 5 AND previous_prop = 4;

扩展实现(查看具体变更时间)

如果需要知道每个实体从prop=4变为prop=5的具体时间点,可以调整查询字段:

SELECT 
    entity,
    dt AS prop_changed_to_5_dt,
    LAG(dt) OVER (PARTITION BY entity ORDER BY dt) AS prop_was_4_dt
FROM (
    SELECT 
        entity,
        dt,
        prop,
        LAG(prop) OVER (PARTITION BY entity ORDER BY dt) AS previous_prop
    FROM T1
) AS entity_prop_history
WHERE prop = 5 AND previous_prop = 4;

代码逻辑说明

  1. LAG(prop) OVER (PARTITION BY entity ORDER BY dt):
    • PARTITION BY entity:将数据按实体分组,确保只在同一实体的记录范围内查找前一条数据
    • ORDER BY dt:每个组内按时间升序排列,保证拿到的是时间线的上一条记录
    • LAG(prop):提取当前记录的上一条记录的prop值,命名为previous_prop
  2. 外层查询通过WHERE条件精准定位“属性从4变为5”的变更节点
  3. 用DISTINCT是为了避免同一个实体多次发生4→5变更时重复输出(不需要去重可直接去掉)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:11:39