Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / помощь с составлением запроса / 8 сообщений из 8, страница 1 из 1
22.11.2018, 11:42
    #39736647
denermak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помощь с составлением запроса
Добрый день!

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

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

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



Коллега говорит тут нужно использовать курсор и переменные.
...
Рейтинг: 0 / 0
22.11.2018, 11:45
    #39736653
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помощь с составлением запроса
denermak,

Код: sql
1.
MAX(Value) OVER (PARTITION BY ObjectId,Hour)
...
Рейтинг: 0 / 0
22.11.2018, 11:52
    #39736659
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помощь с составлением запроса
denermak,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
;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)
...
Рейтинг: 0 / 0
22.11.2018, 11:54
    #39736661
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помощь с составлением запроса
fix
courtdenermak,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
;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)
...
Рейтинг: 0 / 0
22.11.2018, 12:01
    #39736665
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помощь с составлением запроса
ещё не всё ... Hour в rank - ненужен
courtfix
courtdenermak,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
;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)
...
Рейтинг: 0 / 0
22.11.2018, 12:03
    #39736667
denermak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помощь с составлением запроса
court,

огромное спасибо, работает.
...
Рейтинг: 0 / 0
22.11.2018, 12:09
    #39736675
denermak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помощь с составлением запроса
court,

а можно теперь отфильтровать из этого результата часы с максимальной суммой?
...
Рейтинг: 0 / 0
22.11.2018, 12:11
    #39736678
denermak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помощь с составлением запроса
denermak,

а, да последний вариант сработал.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / помощь с составлением запроса / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]