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

Откуда:
Сообщений: 2
Доброго времени суток, столкнулся со следующей проблемой. Есть 2 таблицы: Заказы и Номера.
В первой хранятся
id заказа(PK), id номера(FK), дата регистрации(date)
во второй хранятся:
id номера(PK) и id класса номера(FK)

Необходимо было написать запрос, который ответит, какой класс номеров заказывали чаще всего в N году.
Для этого нужно вывести таблицу, которая будет содержать:
Год, Популярный класс номера, Кол-во заказов

Код запроса пребывает в таком виде:
	SELECT TOP (100) PERCENT YEAR(Заказ.[Дата заселения]) AS Год, Номер.[id класса номера] AS [Популярный класс года], COUNT(Номер.[id класса номера]) AS [Заказов в году]
	FROM Заказ INNER JOIN Номер ON Заказ.[id номера]=Номер.[id номера]
	GROUP BY YEAR(Заказ.[Дата заселения]), Номер.[id класса номера]
	ORDER BY Год DESC


Вывод запроса следующий:
Картинка с другого сайта.

Проблема следующая: мне необходимо, чтобы вывод содержал только один класс номера в году с самой высокой частотой заказов, т.е. чтобы он выдал вместо того, что на картинке, примерно следующее:
2017, 1, 6
2016, 1, 3
2015, 1, 3

Какие манипуляции с кодом надо совершить, чтобы добиться указанного результата?
Заранее спасибо.
24 окт 17, 00:33    [20894327]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ограничениями в запросе  [new]
982183
Member

Откуда: VL
Сообщений: 3353
Что делать, если в году будет несколько классов номеров с одинаковым и максимальным числом заказов?
2017 1 6
2017 2 6
2017 3 4
24 окт 17, 03:53    [20894376]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ограничениями в запросе  [new]
982183
Member

Откуда: VL
Сообщений: 3353
С ходу в голову приходит простая, но некрасивая схема.
Получившуюся табличку сгруппируй по Год, max(Заказов в году)
А потом получившийся результат сджойни с ней же, связав по Заказов в году - max(Заказов в году)
24 окт 17, 04:01    [20894377]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ограничениями в запросе  [new]
aleks222
Guest
982183
С ходу в голову приходит простая, но некрасивая схема.
Получившуюся табличку сгруппируй по Год, max(Заказов в году)
А потом получившийся результат сджойни с ней же, связав по Заказов в году - max(Заказов в году)


Да ладна.

Пущай третстартер учит cross apply.

Или коррелированный запрос. Хоть это щас и немодно.
24 окт 17, 06:22    [20894397]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ограничениями в запросе  [new]
JustAngry711
Member

Откуда:
Сообщений: 2
aleks222, меня интересует скорее решение "здесь и сейчас", но приму к сведению и ознакомлюсь на будущее.

982183, я допускал мысль об одинаковом и максимальном значении, но в контексте это не слишком критично.
И спасибо, создание еще одного запроса решило проблему.
24 окт 17, 09:21    [20894654]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ограничениями в запросе  [new]
iap
Member

Откуда: Москва
Сообщений: 46981
Для начала выбросить TOP(100) PERCENT
24 окт 17, 10:45    [20894873]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить