sql - 具有重复值的 H2 SQL 序列计数
问题描述
我有一个 ID 表,其中有一些重复项,我需要根据 ID 创建一个序列。我正在努力实现以下目标。
[ROW] [ID] [SEQID]
1 11 1
2 11 2
3 12 1
4 13 1
5 13 2
我使用的是旧版本的 H2 DB,它没有使用 windows 函数,所以我必须使用直接 SQL 来完成。我尝试自行加入表格,但我没有得到我想要的结果,因为重复的值会导致问题,有什么想法吗?我在行号中有唯一标识符,但不确定如何使用它来实现我想要的?
SELECT A.ID, COUNT(*) FROM TABLE A
JOIN TABLE B
ON A.ID = B.ID
WHERE A.ID >= B.ID
GROUP BY A.ID;
解决方案
使用计算 seqid 的子查询:
select
t.row, t.id,
(select count(*) from tablename where id = t.id and row <= t.row) seqid
from tablename t
它不如窗口函数高效,但它可以满足您的期望。
请参阅演示(适用于 MySql,但它是标准 SQL)。
结果:
| row | id | seqid |
| --- | --- | ----- |
| 1 | 11 | 1 |
| 2 | 11 | 2 |
| 3 | 12 | 1 |
| 4 | 13 | 1 |
| 5 | 13 | 2 |
推荐阅读
- google-cloud-platform - 无法在 GCE 上创建 GPU 实例
- node.js - Mongoose - 获取和删除子记录
- python - 如何使用正则表达式转大写并删除除管道符号外的所有字母数字
- javascript - 如果我的 JavaScript 文件不是模块,如何使用 Chartjs 和 Date-FNS 将 motnh time aixs 翻译成另一种语言?
- android - 在加载新的声音文件之前释放 soundPool?
- frontend - 搜索工具:自动定义自己、保存响应并重新发送它们的代理服务器
- instagram - 如何在 wordpress 网站上集成订阅 instagram 按钮
- python - 用于在 Python 中调整实例属性的 EXP 系统(基于文本的 RPG)
- ssas - SSAS多维模式教程第4课,使用NamingTemplate
- python - 模块“X”没有属性“Y”,有时会出现,有时不会