【问题标题】:Can I get row_number to continue the sequence on a later query我可以让 row_number 在以后的查询中继续序列吗
【发布时间】:2016-01-14 16:02:57
【问题描述】:

我收到了以下查询,为我提供了一个 ROW_NUMBER,它在正在处理的案件中充当“阶段”。此查询在 INSERT INTO 下运行以填充表。 目前,我们必须每个月重新构建完整的表,以捕获具有连续行号的阶段中的每个更改(随着流程的继续,案例的每个阶段一行)。该表在某些时候会变得太大而无法执行此操作,我希望能够追加,但问题是,我想不出一种方法来让行号从它们停止的地方继续。我在测试表中尝试了它,当我运行查询两次时,将 2015 年 11 月分成两半,每个案例中从 11 月上半月到下半月更改的任何阶段的行号都从 1 重新开始,如果它是在第二次运行中,而不是继续。

ModifiedRecordID 列用于标识案例,您可以看到 PARTITION BY 的分组依据。

有什么方法可以做我想做的事吗?

SELECT  agc.ObjectTypeCode
   , ev.Name                           AS EntityName
   , agc.AttributeId
   , ea.AttributeName
   , ind.createdbyname                 AS CaseCreatedBy
   , agc.CallingUserName
   , agc.CallingUserId
   , LEFT(CAST(agc.OldFieldValue AS NVARCHAR(MAX)), ISNULL(NULLIF(CHARINDEX(',', CAST(agc.OldFieldValue AS NVARCHAR(MAX))) -1, -1), '')) AS ChangedField
   , UPPER(RIGHT(CAST(agc.OldFieldValue AS NVARCHAR(MAX)), LEN(CAST(agc.OldFieldValue AS NVARCHAR(MAX))) - CHARINDEX(',', CAST(agc.OldFieldValue AS NVARCHAR(MAX))))) AS PreviousGuidValue
   , wkt.ptl_name                      AS WorkType
   , ModifiedRecordId
   , ind.ticketnumber                  AS CaseRef
   , agc.ActionId
   , ind.createdon                     AS MatterCreated    
   , agc.LogDateTime                   AS AuditedDate
   , agc.AuditId
   , ROW_NUMBER() OVER(PARTITION BY ModifiedRecordId ORDER BY agc.LogDateTime ASC) Stage

FROM AuditGuidChange agc LEFT JOIN EntityView ev
                   ON agc.ObjectTypeCode = ev.ObjectTypeCode
                 LEFT JOIN EntityAttribute ea
                   ON agc.AttributeId = ea.ColumnNumber
                     AND agc.ObjectTypeCode = ea.MappedObjectCode
                 LEFT JOIN Peppermint_Data.dbo.incident ind
                   ON agc.modifiedrecordid = ind.incidentid
                 LEFT JOIN Filteredptl_worktype wkt
                   ON agc.PreviousGuidValue = wkt.ptl_worktypeid
WHERE LEFT(CAST(agc.OldFieldValue AS NVARCHAR(MAX)), ISNULL(NULLIF(CHARINDEX(',', CAST(agc.OldFieldValue AS NVARCHAR(MAX))) -1, -1), '')) = 'ptl_worktype'
AND CAST(agc.LogDateTime AS DATE) BETWEEN @sDate AND @eDate;

【问题讨论】:

  • 不确定我是否正确描绘了您的目标,但也许您可以将新行号添加到获取该分区的 MAX 现有行号的子查询中?
  • 您是否考虑将identity 列添加到 AuditGuidChange?这会为您生成一个唯一、一致、可重复的数字吗?如果我误解了要求,我深表歉意,我认为可能是这种情况。

标签: sql-server tsql sql-server-2012 row-number


【解决方案1】:
declare @offset int = 12;
select id, ROW_NUMBER() over (order by id) + @offset  as rn 
from table;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-10
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    • 2011-09-05
    • 2018-02-01
    相关资源
    最近更新 更多