我的目标是获取一组按id排序的数据,并返回一个结果集,该结果集指示val列相同的连续行数.例如.鉴于此数据:
| id | val |
| 1 | 33 |
| 2 | 33 |
| 3 | 44 |
| 4 | 28 |
| 5 | 44 |
| 6 | 44 |
我想看到这个结果:
| id | val | run_length |
| 1 | 33 | 2 |
| 3 | 44 | 1 |
| 4 | 28 | 1 |
| 5 | 44 | 2 |
结果集中的id列是可选的.事实上,如果它使它变得更加困难,那么只需将该列留在结果之外.我有点喜欢它,因为它将结果集“固定”到表中的特定位置.
我主要对免费数据库引擎的结果感兴趣.我对解决方案的偏好顺序是:
> sqlite
> Postgres
> MysqL
>甲骨文
> sql Server
> Sybase
解决方法:
我会在你的列表中选择#2,因为使用单个查询在sqlite中这是非常痛苦的.以下是标准sql:
select min(id), val, count(*) as runlength
from (select t.*,
(row_number() over (order by id) -
row_number() over (partition by val order by id
) as grp
from data t
) t
group by grp, val;
这使用两个行数计算的差异来识别相同值的相关性.它应该适用于最新版本的数据库2,4,5和6.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。