powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите пожалуйста с запросом..
8 сообщений из 8, страница 1 из 1
Помогите пожалуйста с запросом..
    #39892662
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Не могу нормально сделать запрос, чтобы тот выполнялся быстрее ((

Есть таблица results :
PrjCode LineId upd U_PlanWC U_EndDate1736_00 1 2017-01-26 0 31.12.20171736_00 1 2017-01-26 850 31.12.20171736_00 2 2018-01-25 1200 31.12.20181736_00 2 2018-10-25 1800 31.12.20181736_00 3 2019-01-25 700 31.12.20191736_00 3 2019-10-23 920 31.12.20191742_00 1 2017-05-21 0 20.12.20171742_00 1 2017-05-21 650 20.12.20171742_00 2 2018-03-25 800 10.12.20181742_00 2 2018-10-20 950 10.12.2018
Надо получить:
PrjCode upd U_PlanWC U_EndDate1736_00 2017-01-26 850 31.12.20171736_00 2018-01-25 2050 31.12.20181736_00 2018-10-25 2650 31.12.20181736_00 2019-01-25 3350 31.12.20191736_00 2019-10-23 3570 31.12.20191742_00 2017-05-21 650 20.12.20171742_00 2018-03-25 1450 10.12.20181742_00 2018-10-20 1600 10.12.2018

т.е. считается U_PlanWC и группировка по PrjCode и LineId .

В первом "окне" (LineId=1) 850 складывается с первым значением второго "окна" (LineId=2) 1200 получается 2050,
затем к 2050 добавляется разность второго и первого значений второго окна т.е. 2050 + 600 = 2650 и т.д.

На сколько я знаю это называется нарастающий итог?!

Вот моё решение. Считается правильно но уж сильно долго:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
with tt (PrjCode, LineId, Upd, U_PlanWC, delta, U_EndDate)
as
(
 select PrjCode
	 ,LineId
	 ,Upd
	 ,U_PlanWC	   
	 ,delta = isnull(U_PlanWC - LAG(U_PlanWC) over (partition by PrjCode, LineId order by Upd), U_PlanWC)	   
	 ,U_EndDate 
   from results    
)

select PrjCode
	,Upd
	,U_PlanWC
	,nxt = sum(delta) over (partition by PrjCode order by Upd rows between unbounded preceding and current row)
	,U_EndDate
  from tt



Нужный результат в nxt.

Думаю, что как то можно соптимизировать запрос но не знаю как ((
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом..
    #39892666
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULER,

У вас нарастающий итог считается по результатам другой оконной функции, LAG(). Это разумеется долго. Мне кажется, LAG() вам здесь не нужен. Достаточно будет просто нарастающего итога.

Правда, не очень понятно, как вы в вашем запросе ухитрились исключить из вывода первые строки в каждой группе. Я не вижу никакого where...
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом..
    #39892669
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor Tiegael
MAULER,

У вас нарастающий итог считается по результатам другой оконной функции, LAG(). Это разумеется долго. Мне кажется, LAG() вам здесь не нужен. Достаточно будет просто нарастающего итога.

Правда, не очень понятно, как вы в вашем запросе ухитрились исключить из вывода первые строки в каждой группе. Я не вижу никакого where...


where есть, но в другом запросе.
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом..
    #39892681
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor Tiegael
MAULER,
Мне кажется, LAG() вам здесь не нужен. Достаточно будет просто нарастающего итога.


Тогда считается не правильно (( Нужно как то разность вычислять в рамках одного "окна" по LineId
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом..
    #39892697
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULER,

Да, я понял. Тогда материализовывать в промежуточную времянку - надеюсь, этот код у вас не во вьюхе...
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом..
    #39892699
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor Tiegael
MAULER,

Да, я понял. Тогда материализовывать в промежуточную времянку - надеюсь, этот код у вас не во вьюхе...


Код должен быть во вьюхе ((
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом..
    #39892748
Remind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
План покажите или хотябы какие индексы в наличии.
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом..
    #39892764
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Remind
План покажите или хотябы какие индексы в наличии.


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


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