查询以获取不使用ntile的Size列上的批处理范围

时间:2017-09-18 10:54:33

标签: sql sql-server

我们正在处理大量的流程记录。我们现在正在使用NTILE函数进行批处理过程。

请查看附图图示例。

我们正在使用当前的NTILE函数来制作范围,然后使用其中的ID列进行处理。

根据新要求,我们必须根据“大小”列制作范围。每批100 GB。

例如:

Batch 1 : 1 has 100 size So ID: 1 record only.
Batch 2 : 2,3,4,5 (Total 100 GB) 
Batch 3 : 6 ID has > 100 so 1 record only
etc. 

请查看随附的屏幕截图以了解更多信息。

我的发现但没有给出确切的解决方案:



DECLARE @intBatchSize BIGINT = 100;
SELECT  y.ID, y.FileSize, y.RunningTotal
       ,DENSE_RANK() OVER (ORDER BY (y.RunningTotal / @intBatchSize) + 1) batch
FROM    (SELECT i.ID, i.FileSize
               ,RunningTotal = SUM(i.Size) OVER (ORDER BY i.ID) -- RANGE UNBOUNDED PRECEDING)
         FROM   dbo.Table1 AS i WITH (NOLOCK)
        ) y
ORDER BY y.ID;




0 个答案:

没有答案