У меня есть база данных, для которой мне нужно объединить записи в другой меньший набор. Этот результирующий набор должен содержать разницу между максимумом и минимумом определенных столбцов исходных записей, в которых они суммируются с определенной суммой, постоянной величиной закрытого интервала C.
Константа C определяет способ агрегирования исходных записей, и ни одна запись в результирующем наборе никогда не превышает ее. Естественно, я должен выполнить это в естественном порядке первичного ключа ..
Для иллюстрации: таблица имеет:
- [ключ]
- [а] * * 1 010
- [Ь]
- [minColumn]
- [maxColumn]
- [N]
... все имеют тип данных.
Я получаю после набора результатов, в котором есть записи, где MAX (maxColumn) - MIN (minColumn) для этой группы такой, что при суммировании их разности она меньше или равна константе C.
Помимо значений MAX (maxColumn) и MIN (minColumn), мне также нужны значения столбца FIRST записи [a] и столбца LAST записи [b] перед созданием новой записи в этом наборе результатов. Наконец, столбец N должен быть суммирован для всех исходных записей в группе.
Есть ли эффективный способ сделать это без курсоров?
----- [Trivial Sample] -------------------------------------- ----------------------
Я пытаюсь сгруппировать по несколько сложной форме бегущей суммы, постоянной С.
Существует только одна таблица, все столбцы имеют тип 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