Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 识别新值时,从1开始计数_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 识别新值时,从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

我需要创建一个列,每当它找到不同的值时,该列将从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 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我已经添加了研究证据。关于接受答案,我需要再看一遍,但通常我看不到对我有效的答案。如果答案对你无效,你应该评论作者如何以及为什么可以改进他们的答案。