Sql 识别新值时,从1开始计数
我需要创建一个列,每当它找到不同的值时,该列将从1开始计数 以下是我的表格示例:Sql 识别新值时,从1开始计数,sql,sql-server,tsql,Sql,Sql Server,Tsql,我需要创建一个列,每当它找到不同的值时,该列将从1开始计数 以下是我的表格示例: if object_id('tempdb.dbo.#myTable') is not null drop table #myTable create table #myTable (dates int, flag char) insert into #myTable values('20181031','V') insert into #myTable values('20181130','V') insert
if object_id('tempdb.dbo.#myTable') is not null drop table #myTable
create table #myTable (dates int, flag char)
insert into #myTable values('20181031','V')
insert into #myTable values('20181130','V')
insert into #myTable values('20181231','V')
insert into #myTable values('20190131','F')
insert into #myTable values('20190228','F')
insert into #myTable values('20190331','F')
insert into #myTable values('20190430','F')
insert into #myTable values('20190531','V')
insert into #myTable values('20190630','V')
insert into #myTable values('20190731','V')
select *
from #myTable
order by 1
dates flag
20181031 V
20181130 V
20181231 V
20190131 F
20190228 F
20190331 F
20190430 F
20190531 V
20190630 V
20190731 V
我需要输出如下所示:
dates flag cnt
20181031 V 1
20181130 V 2
20181231 V 3
20190131 F 1
20190228 F 2
20190331 F 3
20190430 F 4
20190531 V 1
20190630 V 2
20190731 V 3
我曾尝试使用row_number()
的变体进行子查询,但当它到达第二组Vs时,我无法让它再次开始计数。
我研究了这两种解决方案,但无法根据自己的目的推断:我正在使用SQL Server 2012
谢谢这是一种缺口和孤岛问题。最简单的解决方案是使用行号的差异来定义组。然后为所需列添加一个额外的行号:
select t.*,
row_number() over (partition by flag, seqnum - seqnum_2 order by date) as cnt
from (select t.*,
row_number() over (order by date) as seqnum,
row_number() over (partition by flag order by date) as seqnum_2
from #mytable t
) t
order by date;
是一个数字小提琴。根据问题指南,请说明您尝试了什么,并告诉我们您(在本网站或其他地方)发现了什么,以及为什么它不能满足您的需要。这个问题被称为缺口和孤岛来帮助你进行研究。我注意到你已经有一段时间没有接受答案了。。。有什么原因吗?你应该公布你的实际尝试,而不是仅仅提及它。@DaleK我已经添加了研究证据。关于接受答案,我需要再看一遍,但通常我看不到对我有效的答案。如果答案对你无效,你应该评论作者如何以及为什么可以改进他们的答案。