SQL 查询连续(递增)ID
查询一个表中连续出现的 ID 或者是查询连续递增的 ID 其实是很常见的场景,这里记录一下我使用的方法
查询连续重复的 ID
直接进行连接通过连续的 ID 值保证元组的平行,然后约束相等条件即可
1 | select distinct l1.Num as ConsecutiveNums |
查询连续递增的 ID
先看结果要求:
找出每行的人数大于或等于 100 且 id 连续的三行或更多行记录
人数大于 100 好说,重点是连续三行以上的 id 连续
这是我的测试数据:
id | visit_date | people |
---|---|---|
1 | 2021-09-01 | 999 |
2 | 2021-09-02 | 1000 |
3 | 2021-09-03 | 1001 |
4 | 2021-09-04 | 100 |
5 | 2021-09-05 | 1003 |
6 | 2021-09-06 | 1004 |
7 | 2021-09-07 | 1005 |
8 | 2021-09-08 | 1006 |
要找三行以上就将三个表进行一个左连接,当 S1.id + 1 = S2.id && S1.id + 2 = S3.id
就表示连续三个以上了,但这时三个连续以上的数据并不是在一个表中,比如上表中符合条件的最后四行,只有 S1 中只有 5, 6 时 S2 才可以有 6, 7,S3 才可以有 7, 8,但这时的结果是这样的
S1.id | S2.id | S3.id |
---|---|---|
5 | 6 | 7 |
6 | 7 | 8 |
所以将查询出来看作一个子表,使用内连接的方式对数据进行筛选, S.id = SS.i or S.id = SS.ii or S.id = SS.iii
其中 SS 作为结果子表,i, ii, iii 分别是每个连接表的 id,这时在表 S 中符合条件的 id 就是 5, 6, 6, 7, 7, 8
,使用 distinct
修饰一下即可,完整代码如下:
1 | select distinct S.* # 进行结果去重 |
- 本文标题:SQL 查询连续(递增)ID
- 本文作者:Aidan
- 创建时间:2021-11-10 18:25:14
- 本文链接:https://aidanblog.top/sql-continuous_id/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
评论