我在此网站上看到了类似的解决方案,但由于变量使用限制,它在视图中不可用:
在MySQL中为每个组生成序列 https://stackoverflow.com/questions/30118096/generating-sequence-for-each-group-in-mysql
一张表包含 1000 个单词,所以如下:
我的桌子上有这个:
Doc No Rev
DOC-001 A01
DOC-001 A02
DOC-002 A01
DOC-002 B01
DOC-002 B02
DOC-003 Z01
我想在视图中看到这个:
Doc No Rev Seq
DOC-001 A01 1
DOC-001 A02 2
DOC-002 A01 1
DOC-002 B01 2
DOC-002 B02 3
DOC-003 Z01 1
请帮忙!
如果相关:我在 Windows 10 上使用 MySQL Workbench。
如果您运行的是 MySQL 8.0,只需使用row_number()
:
select t.*, row_number() over(partition by doc_no order by rev) seq
from mytable t
如果您运行的是早期版本and您不能使用变量,那么一种选择是相关子查询(尽管这比窗口函数或变量效率低得多):
select
t.*,
(select count(*) + 1 from mytable t1 where t1.doc_no = t.doc_no and t1.rev < t.rev) seq
from mytable t
请注意,使用此技术,关系将得到相同的结果seq
- 所以这实际上表现得像窗口函数rank()
而不是row_number()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)