Sql server 按日期和行数(秩数)划分

Sql server 按日期和行数(秩数)划分,sql-server,Sql Server,我想帮忙解决这个问题 输出字段是我想要的“行数”字段 如果可能的话,我想使用行数或秩数和过分区 SELECT [P_ID] , [DATE], ROW_NUMBER() OVER (PARTITION BY [P_ID] ORDER BY [DATE]) AS ROW_NUM FROM #TEMP 似乎要为每个pid枚举连续日期。您可以通过从日期中减去一个行号来实现这一点——对于连续的日期,差值是恒定的。其余的是jut行编号(): 注意:这是SQL Server语法

我想帮忙解决这个问题

输出字段是我想要的“行数”字段

如果可能的话,我想使用行数秩数过分区

SELECT 
    [P_ID] ,
    [DATE],
    ROW_NUMBER() OVER (PARTITION BY [P_ID] ORDER BY [DATE]) AS ROW_NUM
FROM #TEMP


似乎要为每个
pid
枚举连续日期。您可以通过从日期中减去一个行号来实现这一点——对于连续的日期,差值是恒定的。其余的是jut
行编号()


注意:这是SQL Server语法(看起来像您正在使用的数据库。日期函数因数据库而异。

标记使用的dbms。(可能是SQL Server?)将示例数据作为文本而不是图像发布。此外,我怀疑sql查询是否会返回该数据。@TimSchmelter我猜不是,它返回行数,他询问如何进行输出field@sagi.当前,
ROW_NUM
只显示连续的值。当然不是上面的
ROW_NUM()(按[P_ID]划分,按[DATE]排序)
返回是因为
P\u ID
不是唯一的。OP实际需要什么完全不清楚。我想要的结果是输出字段,而不是行数mssql(t-sql)Hi,这几乎可以正常工作,但如果2013-12-31和2014-01-01还有一个月,那么会有另一个“1”作为输出,我不希望这样,因为没有“bigg gap“大概在两个月之间有5天days@Nils…这应该能够识别连续的日期,而不考虑年份和月份的界限。它不能识别。由于某种原因,当有一个新的月份时,我会得到一个新的nr 1?@Nils…如果您希望月份重新开始,那么您需要按更改
分区,例如按pid分区,年(日期),月(日)
。如果您只添加2013-12-31和2014-01-01,即使我使用您的设备,我仍然会得到一个新的“1”?
P_ID    DATE    ROW_NUM     OUTPUT
3385    2012-02-02  1       1
3385    2012-02-03  2       2
3385    2012-09-24  3       1
3385    2012-09-25  4       2
3385    2013-11-12  5       1
3385    2013-11-13  6       2
3385    2013-11-14  7       3
3385    2013-11-15  8       4
3385    2014-09-09  9       1
3385    2014-09-10  10      2
3385    2014-09-11  11      3
3385    2015-11-11  12      1
3385    2015-11-12  13      2
3385    2015-11-13  14      3
5538    2012-02-02  15      1
5538    2013-11-12  16      1
5538    2013-11-13  17      2
select t.*,
       row_number() over (partition by pid, grp order by date)
from (select t.*,
             dateadd(day,
                     - row_number() over (partition by pid order by date)
                     date) as grp
      from #temp t
     ) t;