sql - 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)
解决方案
对于这个数据集,你可以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
推荐阅读
- java - Android Volley 请求 Gson
- .htaccess - htaccess www 到非 www 重定向,文件扩展名 drop
- azure - 创建事件订阅:“部署失败,出现以下错误:未定义”
- javascript - 格式化谷歌图表时间线的横轴?
- angular - 如何在属性指令的逻辑中获取组件名称?
- python - 在极坐标图的 Thetagrid 线上添加刻度线
- talend - 如何在talend中插入父子记录?
- php - 需要将我的数据类型“DATE”拉到 PHP 的显示表中
- excel - 根据字符删除excel中的行
- elasticsearch-6 - ElasticSearch:多个字段的精确匹配