0 / 0 / 0
Регистрация: 19.01.2017
Сообщений: 20
1

ускорить работу запроса

24.01.2017, 10:49. Показов 2073. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!
сделал рабочий запрос, но время его выполнения занимает около трех с половиной минут при обработке 25 строк. как его ускорить?

дана таблица с тремя колонками [Дата время], [название],[значение]. содержание таблицы выглядит примерно так

Дата | название | значение|
24.01.2017 00:00 | телевизор | 236
24.01.2017 01:00 | телевизор | 237
24.01.2017 02:00 | телевизор | 238
24.01.2017 00:00 | тапок | 126
24.01.2017 01:00 | тапок | 129
24.01.2017 02:00 | тапок | 142
24.01.2017 00:00 | пятница | 8
24.01.2017 01:00 | пятницам | 9,1
24.01.2017 02:00 | пятницам | 9,2

нужно получить

Дата | телевизор | тапок | пятница
24.01.2017 00:00 | 1 | 3 | 1,1
24.01.2017 01:00 | 1 | 13 | 0,1

помимо конкатенации (из строк сделать столбцы) строк нужно еще и из одного часа отнять предыдущий. Решил использовать временную таблицу #test и для вычисления каждой строки прибегаю к использованию циклов в котором выполняю вычитание из значения на дату с датой -1 час и записываю во временную таблицу. код таков

declare @startdate datetime, @enddate datetime, @телевизор
сreate table #test (datetime datetime, телевизор float, тапок float, пятница float)

set @startdate = '24.01.2017 00:00'
set @enddate = '25.01.2017 00:00'

while (@startdate <= @enddate)
begin
set @телевизор = (select distinct b.значение - a.значение from таблица a, таблица b
where a.название = 'телевизор ' and a.datetime = @startdate
and b.название = 'телевизор ' and b.datetime = DateAdd(hour,1,@StartDate))

set @тапок = (select distinct b.значение - a.значение from таблица a, таблица b
where a.название = 'тапок ' and a.datetime = @startdate
and b.название = 'тапок ' and b.datetime = DateAdd(hour,1,@StartDate))

set @пятница= (select distinct b.значение - a.значение from таблица a, таблица b
where a.название = 'пятница' and a.datetime = @startdate
and b.название = 'пятница' and b.datetime = DateAdd(hour,1,@StartDate))

insert into #test (datetime,телевизор , тапок , пятница )
values (@startdate, @телевизор , @тапок , @пятница )
Set @StartDate = DateAdd(hour,1,@StartDate)
end

select * from #test


все имена и названия изменены )))) и количество результатирующих строк около 8, а не 3. через представление думал сделать (VIEW) но оно не работает со временными таблицами и не думаю что ускорит работу запроса.
Заранее благодарен.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.01.2017, 10:49
Ответы с готовыми решениями:

Помогите ускорить выполнение запроса
Помогите ускорить выполнение запроса: SELECT Clients.Id_Client, ...

Ускорить работу с формированием запроса
Всем привет! Помогите решить задачу: Необходимо добавить через запрос большое количество строк в...

Как ускорить работу?
Прога ещё не доработана, сейчас интересует именно графический режим, когда нажимается клавиша 1-4...

ускорить работу скрипта
Друзья - php скрипт выполняется более 400 секунд! Подскажите что можно подправить - что бы...

3
3550 / 2124 / 752
Регистрация: 02.06.2013
Сообщений: 5,152
24.01.2017, 11:58 2
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
declare @t table (Дата datetime, название varchar(30), значение numeric(18,2));
 
insert into @t
values
('20170124 00:00', 'телевизор', 236),
('20170124 01:00', 'телевизор', 237),
('20170124 02:00', 'телевизор', 238),
('20170124 00:00', 'тапок', 126),
('20170124 01:00', 'тапок', 129),
('20170124 02:00', 'тапок', 142),
('20170124 00:00', 'пятница', 8),
('20170124 01:00', 'пятницам', 9.1),
('20170124 02:00', 'пятницам', 9.2);
 
with a as
(
 select
  Дата, название,
  значение - lag(значение, 1, 0) over (partition by название order by Дата) as значение
 from
  @t
)
select
 p.*
from
 a
pivot
(
 sum(значение)
 for название in ([телевизор], [тапок], [пятница], [пятницам])
) p;
1
0 / 0 / 0
Регистрация: 19.01.2017
Сообщений: 20
24.01.2017, 13:49  [ТС] 3
ух ты, спасибо, буду разбирать неизвестные мне функции. но пивот не реализован в скуле 2000.
0
3550 / 2124 / 752
Регистрация: 02.06.2013
Сообщений: 5,152
24.01.2017, 14:17 4
Labotryas, версию сервера нужно сообщать, когда вопрос задаете.
Для 2000-го:
T-SQL
1
2
3
4
5
6
7
8
9
10
11
select
 a.Дата,
 min(case when a.название = 'телевизор' then a.значение - isnull(b.значение, 0) end) as телевизор,
 min(case when a.название = 'тапок' then a.значение - isnull(b.значение, 0) end) as тапок,
 min(case when a.название = 'пятница' then a.значение - isnull(b.значение, 0) end) as пятница,
 min(case when a.название = 'пятницам' then a.значение - isnull(b.значение, 0) end) as пятницам
from
 @t a left join
 @t b on b.название = a.название and b.Дата = dateadd(hh, -1, a.Дата)
group by
 a.Дата;
0
24.01.2017, 14:17
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.01.2017, 14:17
Помогаю со студенческими работами здесь

23 Способа Ускорить Работу 1с 8.2 - 3
23 способа ускорить работу 1С 8.2 - 3 Видеоинструкция покажет Вам 23 способа, что позволят...

Ускорить работу с файлами
Всем привет! Вот код программы: void FileCompare(Object Info) { ...

Ускорить работу сайта
Есть сайт https://rentclasscar.ru/ делал его не я, я только помогал частично со стилизацией. Сайт...

Ускорить работу метода
Здравствуйте. Имеется небольшой и простой метод: private string ToStringLine(byte byteArray) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

Новые блоги и статьи
Интеграция Arduino и ChatGPT: Практическое руководство
InfoMaster 16.01.2025
В современную эпоху технологических инноваций интеграция искусственного интеллекта с микроконтроллерами открывает принципиально новые возможности для создания умных устройств и автоматизированных. . .
Как создать робота, управляемого ChatGPT
InfoMaster 16.01.2025
Концепция проекта В современную эпоху искусственный интеллект и робототехника становятся все более доступными для энтузиастов и разработчиков. Создание роботизированной руки, управляемой ChatGPT,. . .
Как создать ChatGPT бота в Telegram на Python
InfoMaster 16.01.2025
В современном мире технологии искусственного интеллекта становятся все более доступными для разработчиков, открывая новые возможности для создания умных и интерактивных приложений. Одним из самых. . .
Машинное обучение с помощью Python
InfoMaster 16.01.2025
Машинное обучение стало неотъемлемой частью современных технологий, позволяя компьютерам учиться на основе данных и принимать решения без явного программирования. В сочетании с языком. . .
Использование связки C# и PHP в корпоративной разработке и микросервисной архитектуре
InfoMaster 16.01.2025
Введение в интеграцию C# и PHP В современной корпоративной разработке все чаще возникает потребность в создании гибких и масштабируемых решений, способных эффективно решать широкий спектр. . .
Как использовать Kerio дома для управления сетью и пользователями
InfoMaster 16.01.2025
Использование технологий для улучшения повседневной жизни стало неотъемлемой частью современного быта. Одной из таких технологий является Kerio — мощный инструмент для управления сетью и. . .
Есть ли будущее у DVD и Blu-ray?
InfoMaster 16.01.2025
В эпоху стремительного развития цифровых технологий и повсеместного распространения потоковых сервисов вопрос о будущем физических носителей информации становится все более актуальным. Особенно остро. . .
Как проводить научные вычисления на Python
InfoMaster 15.01.2025
Python стал одним из наиболее востребованных языков программирования в области научных вычислений благодаря своей простоте, гибкости и обширной экосистеме специализированных библиотек. Научные. . .
Создание игры типа Minecraft на PyGame/Python: пошаговое руководство
InfoMaster 15.01.2025
В данном руководстве мы рассмотрим процесс создания игры в стиле Minecraft с использованием библиотеки PyGame на языке программирования Python. Этот проект идеально подходит как для начинающих. . .
Как создать свою первую игру в стиле Doom на Unreal Engine
InfoMaster 15.01.2025
Разработка шутера от первого лица в стиле классического Doom представляет собой увлекательное путешествие в мир игрового программирования, где сочетаются творческий подход и технические навыки. . . .
Параллельное программировани­е: основные технологии и принципы
InfoMaster 15.01.2025
Введение в параллельное программирование Параллельное программирование представляет собой фундаментальный подход к разработке программного обеспечения, который позволяет одновременно выполнять. . .
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru