Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Агрегирование + сортировка  [new]
HOME_X
Member

Откуда:
Сообщений: 2696
Доброго дня господа !

Имею запрос под Oracle
select A.F1,
       Max(A.F3) keep(Dense_Rank last order by F2) TOTAL
  from (select 1 F1,
               6 F2,
               7 F3 
          from DUAL    
         union all
        select 1 F1,
               2 F2,
               3 F3 
          from DUAL    
       ) A        
 group by F1


Результат
F1 TOTAL
1 7

Вопрос - можно ли аналогично реализовать в MSQL
Прием с подзапросом известен !

Спасибо !
28 апр 12, 17:02    [12486337]     Ответить | Цитировать Сообщить модератору
 Re: Агрегирование + сортировка  [new]
HOME_X
Member

Откуда:
Сообщений: 2696
HOME_X,
Пардон неудачный пример
Вот так
select A.F1,
       Max(A.F3) keep(Dense_Rank last order by F2) TOTAL
  from (select 1 F1,
               6 F2,
               7 F3 
          from DUAL    
         union all
        select 1 F1,
               2 F2,
               9 F3 
          from DUAL    
       ) A        
 group by F1
28 апр 12, 17:06    [12486346]     Ответить | Цитировать Сообщить модератору
 Re: Агрегирование + сортировка  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31984
HOME_X
Вопрос - можно ли аналогично реализовать в MSQL
А что нужно реализовать?

HOME_X
Прием с подзапросом известен !
И как нужно реализовать? А то понятно, что синтаксис оракла не поддерживается сиквелом, так что вообще без изменений текста запроса не получится.
28 апр 12, 18:25    [12486522]     Ответить | Цитировать Сообщить модератору
 Re: Агрегирование + сортировка  [new]
HOME_X
Member

Откуда:
Сообщений: 2696
alexeyvg
А что нужно реализовать?


При агрегации необходимо получить последную строку данной группы
(последная - это сортировка по полю F2)
select A.F1,
Max(A.F2) keep(Dense_Rank last order by F2) F2,
Max(A.F3) keep(Dense_Rank last order by F2) F3
from (select 1 F1,
6 F2,
7 F3
from DUAL
union all
select 1 F1,
2 F2,
9 F3
from DUAL
) A
group by F1

Т.е.
F1 F2 F3
1 6 7

alexeyvg
И как нужно реализовать?
....синтаксис оракла не поддерживается сиквелом...


Украина не Россия !!! А Oracle не MSQL !!! - это понятно .
Делать агрегирующий запрос, потом связь - громоздко,
Но может есть прием присущий MSQL.

Заранее благодарен !
3 май 12, 12:57    [12500596]     Ответить | Цитировать Сообщить модератору
 Re: Агрегирование + сортировка  [new]
iljy
Member

Откуда:
Сообщений: 8711
HOME_X,

select top 1 with ties *
 from (values(1,6,7),(1, 2, 9)) t(F1,F2,F3)
 order by row_number() over(partition by F1 order by F2 desc)
3 май 12, 13:03    [12500649]     Ответить | Цитировать Сообщить модератору
 Re: Агрегирование + сортировка  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
iljy
select top(1) with ties *
 from (values(1,6,7),(1, 2, 9)) t(F1,F2,F3)
 order by row_number() over(partition by F1 order by F2 desc)
Как-то по человечески записано, а первоначальный вариант не особо читабельный (привычку выкинем).
Словно на оракле нельзя было также.
3 май 12, 16:01    [12502321]     Ответить | Цитировать Сообщить модератору
 Re: Агрегирование + сортировка  [new]
HOME_X
Member

Откуда:
Сообщений: 2696
Оно - спасибо !
3 май 12, 16:12    [12502465]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить