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

Откуда:
Сообщений: 10
Добрый день!

Есть следующая временная таблица из базы данных:
[ID] [ObjectId] [DeviceId] [Hour] [Value]

Нужно найти максимум за час суммы Value группированной по ObjectID и вывести строки по этому часу.

Моих знаний хватает только на простенький подсчет суммы по ObjecID:
SELECT ObjectId, SUM(Value), Hour FROM #data_temp GROUP BY ObjectID, HOUR


Коллега говорит тут нужно использовать курсор и переменные.
22 ноя 18, 11:42    [21741009]     Ответить | Цитировать Сообщить модератору
 Re: помощь с составлением запроса  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
denermak,

MAX(Value) OVER (PARTITION BY ObjectId,Hour)
22 ноя 18, 11:45    [21741019]     Ответить | Цитировать Сообщить модератору
 Re: помощь с составлением запроса  [new]
court
Member

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

;with cte as (
	select 
		ObjectId
		,Hour
		,Value 
		,sum(Value)over(partition by ObjectId, Hour) as sumValue
	from #data_temp
)
select top 1 with ties
	*
from cte 
order by row_number()over(partition by ObjectId, Hour order by sumValue desc)
22 ноя 18, 11:52    [21741033]     Ответить | Цитировать Сообщить модератору
 Re: помощь с составлением запроса  [new]
court
Member

Откуда:
Сообщений: 1956
fix
court
denermak,

;with cte as (
	select 
		ObjectId
		,Hour
		,Value 
		,sum(Value)over(partition by ObjectId, Hour) as sumValue
	from #data_temp
)
select top 1 with ties
	*
from cte 
order by rank()over(partition by ObjectId, Hour order by sumValue desc)
22 ноя 18, 11:54    [21741038]     Ответить | Цитировать Сообщить модератору
 Re: помощь с составлением запроса  [new]
court
Member

Откуда:
Сообщений: 1956
ещё не всё ... Hour в rank - ненужен
court
fix
court
denermak,

;with cte as (
	select 
		ObjectId
		,Hour
		,Value 
		,sum(Value)over(partition by ObjectId, Hour) as sumValue
	from #data_temp
)
select top 1 with ties
	*
from cte 
order by rank()over(partition by ObjectId /*, Hour */ order by sumValue desc)

22 ноя 18, 12:01    [21741049]     Ответить | Цитировать Сообщить модератору
 Re: помощь с составлением запроса  [new]
denermak
Member

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

огромное спасибо, работает.
22 ноя 18, 12:03    [21741053]     Ответить | Цитировать Сообщить модератору
 Re: помощь с составлением запроса  [new]
denermak
Member

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

а можно теперь отфильтровать из этого результата часы с максимальной суммой?
22 ноя 18, 12:09    [21741071]     Ответить | Цитировать Сообщить модератору
 Re: помощь с составлением запроса  [new]
denermak
Member

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

а, да последний вариант сработал.
22 ноя 18, 12:11    [21741077]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить