微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mysql – 运行长度或连续相同值编码的SQL查询

我的目标是获取一组按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] 举报,一经查实,本站将立刻删除。

相关推荐