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

SQL Server如何获取每个client_sysid最新package_level变更首条记录

解决SQL Server按client_sysid取package_level最近一次变更首条记录的问题

表结构

现有hcp_funding_packages表结构如下:

client_sysid (int)
package_level (int)
created_at (datetime)

需求说明

针对每个client_sysid,获取package_level发生最近一次变更对应的第一条记录。
参考示例数据如下,client_sysid为1的用户,package_level最近一次变更是从3改回1,对应首条记录就是2021-01-04的粗体行:

client_sysidpackage_leveldate
112021-01-01
132021-01-02
132021-01-03
112021-01-04
112021-01-05
112021-01-06

实现SQL

通过窗口函数标记相邻行的等级变更,再筛选最近一次变更的首条记录即可:

WITH mark_changed AS (
    -- 标记当前行和前一行的package_level是否不同,不同视为发生变更
    SELECT 
        *,
        CASE WHEN LAG(package_level) OVER (PARTITION BY client_sysid ORDER BY created_at) <> package_level THEN 1 ELSE 0 END AS is_changed
    FROM hcp_funding_packages
),
rank_changed AS (
    -- 对每个client的变更记录按时间倒序排序,最近的变更排第一位
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY client_sysid ORDER BY CASE WHEN is_changed = 1 THEN created_at END DESC) AS rn
    FROM mark_changed
)
-- 筛选每个client最近一次变更的记录
SELECT client_sysid, package_level, created_at
FROM rank_changed
WHERE rn = 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:36:07