【发布时间】:2009-10-06 19:37:37
【问题描述】:
我有一个数据库,我需要将记录聚合到另一个较小的集合中。此结果集应包含原始记录的特定列的最大值和最小值之间的差,它们加起来为某个 SUM,即闭区间常数 C。
常数 C 决定了原始记录的聚合方式,结果集中的任何条目都不会超过它。自然我应该以自然主键顺序运行它..
为了说明:表有:
- [键]
- [a]
- [b]
- [分钟列]
- [最大列]
- [N]
...都是 int 数据类型。
我正在寻找一个结果集,其中包含该组的 MAX(maxColumn) - MIN(minColumn) 的条目,这样当它们的差值相加时,它小于或等于常数 C。
除了 MAX(maxColumn) 和 MIN(minColumn) 值之外,在此结果集中创建新条目之前,我还需要 FIRST 记录列 [a] 和 LAST 记录列 [b] 值。最后,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
我需要结果集看起来像,对于 210 的常数 C:
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
【问题讨论】:
-
一组示例数据和示例结果将阐明这一点。
-
你想按什么分组?
-
您的问题缺少为您解决此问题所需的一切:表格、列、示例数据、分组细节和预期结果
-
添加了简单示例,如果需要进一步解释问题,请告诉我。干杯。
-
您运行的是什么 SQL Server 版本?
标签: sql sql-server database tsql