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

如何编写SQL查询仅返回项目状态发生变更的记录?

解决方案

要筛选出项目状态变更的记录,核心是对比每条记录与同项目上一条记录的状态差异,同时保留每个项目的初始状态记录。用窗口函数LAG()就能高效实现,具体如下:

假设你的表名为project_history,关键字段包括:

  • project_id:项目唯一标识
  • status:项目状态
  • change_timestamp:记录生成的时间戳(用于确定记录先后顺序)

SQL查询语句

SELECT *
FROM (
    SELECT 
        *,
        -- 获取同项目的上一条记录状态
        LAG(status) OVER (PARTITION BY project_id ORDER BY change_timestamp) AS prev_status
    FROM project_history
) AS ranked
-- 筛选条件:项目第一条记录 或 当前状态与上一条不同
WHERE prev_status IS NULL OR status != prev_status;

逻辑说明

  1. LAG(status) OVER (PARTITION BY project_id ORDER BY change_timestamp):按项目分组、时间戳排序,获取每组内当前记录的上一条状态值。
  2. 外层查询筛选两类记录:
    • 项目的第一条记录(prev_status IS NULL),即初始的"In Progress"状态记录
    • 当前状态与上一条状态不一致的记录,也就是发生状态变更的节点记录

这样就能精准提取所有状态变更相关的记录,覆盖从初始到最终完成的所有状态切换节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:15:37