sum(), max() и значение при max()

Prolog
Дата: 29.01.2009 16:26:46
Имеется следующий запрос:
declare @a table(i int, j int, k int) -- уникальность по i и k
insert @a values(1,10,100)
insert @a values(1,11,111)
insert @a values(2,20,200)
select
  i,
  max_k  = max(k),
  sum_j  = sum(j),
  last_j = (select top 1 j from @a a2 where a2.i=a1.i order by a2.k desc)
from
  @a a1
group by
  i
Т.е. группируя по i, нужно получить последнее (максимальное) значение k, сумму по j и значение j, соотвествующее последнему (максимальному) значению k.
Можно ли переписать этот запрос (получить тот же результат) как-то по иному. Дело в том, что в действительности @a это derived table, соответственно такой способ определения last_j не подойдёт. Вариант по типу: "сначала записать derived table во временную таблицу, а потом на её основе сделать запрос" - известен. Кто, что может предложить ещё?
Glory
Дата: 29.01.2009 16:29:19
Prolog
Кто, что может предложить ещё?

Перейти на SQL2005 и использовать OVER
Prolog
Дата: 29.01.2009 16:33:11
SQL 2005 подходит, а как в этом случае использовать over. Пробовал - не получалось.
iap
Дата: 29.01.2009 16:40:12
Так?
declare @a table(i int, j int, k int) -- уникальность по i и k
insert @a values(1,10,100)
insert @a values(1,11,111)
insert @a values(2,20,200)
select top 1 with ties
  i,
  max_k  = max(k) over(partition by i),
  sum_j  = sum(j) over(partition by i),
  j
from @a
order by row_number()over(partition by i order by k desc);
iap
Дата: 29.01.2009 16:41:22
А derived table заменить на CTE. Для красоты!
Prolog
Дата: 29.01.2009 17:18:06
iap
Так?
declare @a table(i int, j int, k int) -- уникальность по i и k
insert @a values(1,10,100)
insert @a values(1,11,111)
insert @a values(2,20,200)
select top 1 with ties
  i,
  max_k  = max(k) over(partition by i),
  sum_j  = sum(j) over(partition by i),
  j
from @a
order by row_number()over(partition by i order by k desc);

Спасибо. Респект.