常数C确定了如何聚合原始记录,并且结果集中的任何条目都不会超过它。自然地,我应该按照自然主键顺序运行它。
举例来说:表格有:
- [key]
- [a]
- [b]
- [minColumn]
- [maxColumn]
- [N]
......全部都是int数据类型。
我需要一个结果集,其中MAX(maxColumn) - MIN(minColumn)的差值对于该组而言,当它们的差值总和小于或等于常数C时。除了MAX(maxColumn)和MIN(minColumn)值之外,我还需要在创建此结果集之前获得FIRST记录列[a]和LAST记录列[b]值。最后,应为组中所有原始记录SUM N列。
是否有一种有效的方法可以在没有游标的情况下完成这项任务?
-----[简单示例]------------------------------------------------------------
我正在尝试按稍微复杂的形式分组运行总和,即常数C。
只有一个表格,所有列都是int类型,样本数据如下:
declare @t table (
PK int primary key
, int a, int b, int minColumn, int maxColumn, int N
)
insert @t values (1,5,6,100,200,1000)
insert @t values (2,7,8,210,300,2000)
insert @t values (3,9,10,420,600,3000)
insert @t values (4,11,12,640,800,4000)
因此,对于:
key, a, b, minColumn, maxColumn, N
---------------------------------------
1, 5, 6, 100, 200, 1000
2, 7, 8, 210, 300, 2000
3, 9, 10, 420, 600, 3000
4, 11, 12, 640, 800, 4000
我需要结果集看起来像这样,对于常数C为210:
firstA | lastB | MIN_minColumn | MAX_maxColumn | SUM_N
5 8 100 300 3000
9 10 420 600 3000
11 12 640 800 4000
[按照下面讨论的添加赏金和示例]
对于 C = 381,它应该包含 2 行:
firstA | lastB | MIN_minColumn | MAX_maxColumn | SUM_N
5 8 100 300 3000
9 12 420 800 7000
希望这能更好地展示问题..如果有一个常数C,比如1000,你将在结果中得到1条记录:
firstA | lastB | MIN_minColumn | MAX_maxColumn | SUM_N
5 12 100 800 10000