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

Откуда:
Сообщений: 5
Добрый день, коллеги.

Есть входящие данные:

create table result (id int primary key identity, value int)

insert into result(category,value)
values(2,3)

insert into result(category,value)
values(2,3)

insert into result(category,value)
values(1,3)

insert into result(category,value)
values(2,2)

insert into result(category,value)
values(2,2)

insert into result(category,value)
values(2,1)

Правильный запрос должен возвращать следующие результаты:

id category value
1 2 3
4 2 2
6 2 1
2 2 3
5 2 2
3 1 3

Поле category должно быть отсортировано по убыванию, так чтобы value было также последовательно(!) отсортировано по убыванию по группам.

Несколько других примеров правильных результатов поиска:

category value
2 3
2 2
2 1
2 2
2 1
1 3
1 3 (правильно в том случае, если в категории "1" больше нет никаких значений кроме 3)

category value
3 5
3 4
3 2
3 5
3 4
2 5
2 4
2 3
2 5

"Неправильные" результаты поиска:

category value
3 3
3 2
3 3
3 1 (эта запись должна быть третей в результатах поиска)

category value
3 3
3 2
3 1
3 4 (эта запись должна быть первой)

Понимаю, что условия не очень простые, поэтому если что-то непонятно описал, пожалуйста, уточняйте. Главное требование к запросу - он должен работать максимально быстро. Нагрузка - несколько десятков запросов такого вида в секунду.
31 окт 11, 15:18    [11527155]     Ответить | Цитировать Сообщить модератору
 Re: Хорошая непростая задачка по SQL запросам  [new]
Glory
Member

Откуда:
Сообщений: 104751
Сергей Киселев
так чтобы value было также последовательно(!) отсортировано по убыванию по группам.

И что является "группой" ?
31 окт 11, 15:28    [11527264]     Ответить | Цитировать Сообщить модератору
 Re: Хорошая непростая задачка по SQL запросам  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

так?
with t as (
select *, row_number() over (partition by category, value order by id) rn from result
)
select * from t order by category desc, rn, value desc

Posted via ActualForum NNTP Server 1.4

31 окт 11, 15:42    [11527437]     Ответить | Цитировать Сообщить модератору
 Re: Хорошая непростая задачка по SQL запросам  [new]
Сергей Киселев
Member

Откуда:
Сообщений: 5
to daw, СПАСИБО ОГРОМНОЕ!!! Вы гений! Это то что нужно! Ничего ранее не знал о partion by :(
31 окт 11, 16:34    [11527924]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить