所以,我的数据库中有记录:
id | 日期时间 | 姓名 | 级别 |
---|---|---|---|
0 | 2022-03-22 23:18:01 | 约翰 | 615 |
1 | 2022-03-22 23:17:01 | 约翰 | 616 |
2 | 2022-03-22 23:16:02 | 约翰 | 616 |
3 | 2022-03-22 23:15:01 | 约翰 | 616 |
4 | 2022-03-22 23:14:01 | 约翰 | 617 |
5 | 2022-03-22 23:13:01 | 约翰 | 617 |
6 | 2022-03-22 23:12:01 | 约翰 | 616 |
7 | 2022-03-22 23:11:01 | 约翰 | 617 |
8 | 2022-03-22 23:10:02 | 约翰 | 618 |
9 | 2022-03-22 23:09:01 | 约翰 | 618 |
结果我想获得这些值,其中下一个“lvl”与上一个“lvl”不同。 我的意思是,我想获取带有 id 的结果记录:
0 - 因为它是第一个,
1 - 因为lvl不等于0,
2,3 - 跳过,因为lvl与1相同
4 - 因为 lvl 与 1 不同,
5 - 跳过,因为 lvl 与 4 相同,
6 - 因为等级与 5 不同,
7 - 因为等级与 6 不同,
8 - 因为等级与 7 不同,
9 - 跳过。
P粉1649427912024-04-05 16:08:06
这似乎非常适合 lag
分析函数(使用 MySQL 8 ):
with keep as ( select *, if(id=Min(id) over() or level != lag(level) over(order by id), 1, 0) keepme from t ) select id from keep where keepme=1;