【问题标题】:Create Ranges for a table by batchsize in SQL Server在 SQL Server 中按批处理大小为表创建范围
【发布时间】:2016-04-17 05:51:13
【问题描述】:

如何批量处理表的记录并创建范围,即获取每个批次的最小值和最大值?

表有 1500 万条记录,表上的唯一键(此处为 personID)不是连续的。

输入参数:

     @TableName     NVARCHAR(250)  =’Person’
    ,@BatchColumn   NVARCHAR(250)  =’Personid’
    ,@BatchSize     INT      = 5

示例表:

          personid  Name    EmailAddress
      1      1      Rob 
      2      3      Kate    
      3      5      Nate    
      4      8      Mary    
      5      9      Rama    
      6      11     Dan 
      7      15     Tom 
      8      17     Star    
      9      20     Berry   
      10     23     King    
      .      .      
      .      .      
      .      .      
     96      139        
     97      145        
     98      148        
     99      149        
     100     150        
     101     153    Sony    
     102     155    Duff    

预期输出:batchsize=5,每条记录每 5 条记录有最小值和最大值,最后一个桶有剩余记录的最小值和最大值。

   Batch No.    Min Value   Max Value
     1             1             9
     2             11            23
     .             .              .
     .             .              .
     .             .              .
     20           139            150
     21           153            155

【问题讨论】:

    标签: sql sql-server tsql range


    【解决方案1】:

    SQL 语句将使用row_number() 和一些算术:

    select (1 + (seqnum - 1) / @batchSize) as batch, min(id), max(id)
    from (select t.*,
                 row_number() over (order by id) as seqnum
          from t
         ) t
    group by (seqnum - 1) / @batchSize
    order by batch;
    

    【讨论】:

      猜你喜欢
      • 2015-01-11
      • 2013-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      相关资源
      最近更新 更多