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;