首页 > 解决方案 > SQL 获取最后一次数字设置为 1

问题描述

我有一个类似于下面的 sql 表。我想获得它最后一次从 0 更改为 1 以及最后一次更改回 0 的时间(在下面突出显示以获取示例 id)。

在此处输入图像描述

我尝试过的是:

select * from Table t1 join Table t2 on t1.id = t2.id join Table t3 on t1.id = t3.id 
where t1.flag = 1 and t2.flag = 0 and t3.flag 
group by t1.id
having min(t1.createdtime) between max(t2.createdtime) and min(t3.createdtime)

标签: sqlsql-servertsqlwindow-functionsgaps-and-islands

解决方案


对于这个数据集,你可以lag()用来引入上一行的标志,将其用作过滤条件,然后聚合:

select 
    id,
    max(createdtime) createdtime,
    flag
from (
    select 
        t.*,
        lag(flag) over(partition by id order by createdtime) lagflag
    from mytable t
) t
where (flag = 0 and lagflag = 1) or (flag = 1 and lagflag = 0)
group by id, flag

推荐阅读