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

Откуда:
Сообщений: 71
В таблица #BuyersGKO одна запись.
Есть запрос, в таком виде он не выполняется или очень долго выполняется:
	
SELECT c.Client_Id, SubString(gt.GKO_Text,0,30) as GKO_Text,
    Sum(GKO_Numb) as GKO_Numb,d.Contract_ID,gt.Lot
FROM Deposit d	
    inner join GKO_Tuning gt on d.Contract_ID=gt.Contract_ID and d.Contract_ID in (Select distinct Contract_ID from #BuyersGKO)
    inner join @SmallCl c on d.Client_Id=c.Client_Id
WHERE d.Date<=@OperationDate
and gt.L_Group=1
GROUP BY c.Client_Id,d.Contract_ID,GKO_Text,gt.Lot 
HAVING (Sum(GKO_Numb)>0)
UNION ALL
select pag.client_id, SubString(gt.GKO_Text,0,30) as GKO_Text,
    sum(GKO_Numb*deal_sign*-1) as GKO_Numb,pag.Contract_ID,gt.Lot
from person_account_gko as pag
    inner join GKO_Tuning gt on pag.Contract_ID=gt.Contract_ID and pag.Contract_ID in (Select distinct Contract_ID from #BuyersGKO)
    inner join @SmallCl c on pag.Client_Id=c.Client_Id
where pag.calculation_date = @nextday
and trading_regime <> 0
and account = 1
GROUP BY pag.Client_Id, pag.Contract_ID,GKO_Text,gt.Lot 
having sum(GKO_Numb*deal_sign*-1) > 0
) as x
group by Client_Id, GKO_Text, Contract_ID, Lot


Если вместо
Select distinct Contract_ID from #BuyersGKO
вставить просто числовое значение, толко во второй запрос из объединения, то все работает:

SELECT c.Client_Id, SubString(gt.GKO_Text,0,30) as GKO_Text,
    Sum(GKO_Numb) as GKO_Numb,d.Contract_ID,gt.Lot
FROM Deposit d	
    inner join GKO_Tuning gt on d.Contract_ID=gt.Contract_ID and d.Contract_ID in (Select distinct Contract_ID from #BuyersGKO)
    inner join @SmallCl c on d.Client_Id=c.Client_Id
WHERE d.Date<=@OperationDate
and gt.L_Group=1
GROUP BY c.Client_Id,d.Contract_ID,GKO_Text,gt.Lot 
HAVING (Sum(GKO_Numb)>0)
UNION ALL
select pag.client_id, SubString(gt.GKO_Text,0,30) as GKO_Text,
    sum(GKO_Numb*deal_sign*-1) as GKO_Numb,pag.Contract_ID,gt.Lot
from person_account_gko as pag
    inner join GKO_Tuning gt on pag.Contract_ID=gt.Contract_ID and pag.Contract_ID in (2598)
    inner join @SmallCl c on pag.Client_Id=c.Client_Id
where pag.calculation_date = @nextday
and trading_regime <> 0
and account = 1
GROUP BY pag.Client_Id, pag.Contract_ID,GKO_Text,gt.Lot 
having sum(GKO_Numb*deal_sign*-1) > 0
) as x
group by Client_Id, GKO_Text, Contract_ID, Lot


В чем может быть проблема? Где я мог накосячить?
27 июн 13, 11:14    [14490427]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с запросом...  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
вы бы запрос причесали, алиасы что ли поставили - вам очевидно, где, к примеру находится поле GKO_Numb, а нам нет. Ну скрипт на создание таблиц, индексов, планы выполнения . А так статистику обновить - может все решится, или вот заранее подготовить временую табличку и вместо этого джойна использовать ее
inner join GKO_Tuning gt on d.Contract_ID=gt.Contract_ID and d.Contract_ID in (Select distinct Contract_ID from #BuyersGKO)
27 июн 13, 11:25    [14490488]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с запросом...  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Мистер Хенки
вы бы запрос причесали, алиасы что ли поставили - вам очевидно, где, к примеру находится поле GKO_Numb, а нам нет. Ну скрипт на создание таблиц, индексов, планы выполнения . А так статистику обновить - может все решится, или вот заранее подготовить временую табличку и вместо этого джойна использовать ее
inner join GKO_Tuning gt on d.Contract_ID=gt.Contract_ID and d.Contract_ID in (Select distinct Contract_ID from #BuyersGKO)
А зачем в IN(SELECT ...) используется DISTINCT - не подскажете?
27 июн 13, 11:28    [14490500]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с запросом...  [new]
hanko_nikita
Member

Откуда:
Сообщений: 71
iap
Мистер Хенки
вы бы запрос причесали, алиасы что ли поставили - вам очевидно, где, к примеру находится поле GKO_Numb, а нам нет. Ну скрипт на создание таблиц, индексов, планы выполнения . А так статистику обновить - может все решится, или вот заранее подготовить временую табличку и вместо этого джойна использовать ее
inner join GKO_Tuning gt on d.Contract_ID=gt.Contract_ID and d.Contract_ID in (Select distinct Contract_ID from #BuyersGKO)
А зачем в IN(SELECT ...) используется DISTINCT - не подскажете?


Это в тестовом варианте там одна строка, а так их там может быть много с одинаковым contract_id.
27 июн 13, 11:32    [14490515]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с запросом...  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Да и нафига тим in , если ето по факту inner join ?
да и последний group by тоже сомнения наводит
27 июн 13, 11:33    [14490519]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с запросом...  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
hanko_nikita
Это в тестовом варианте там одна строка, а так их там может быть много с одинаковым contract_id.

а почему на момент формирования темповой таблицы на сделать их уникальными ?
27 июн 13, 11:34    [14490522]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с запросом...  [new]
hanko_nikita
Member

Откуда:
Сообщений: 71
Maxx
hanko_nikita
Это в тестовом варианте там одна строка, а так их там может быть много с одинаковым contract_id.

а почему на момент формирования темповой таблицы на сделать их уникальными ?


Потому что это таблица используется в другом месте где необходимы все записи из нее.
27 июн 13, 11:41    [14490561]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с запросом...  [new]
hanko_nikita
Member

Откуда:
Сообщений: 71
Maxx
Да и нафига тим in , если ето по факту inner join ?
да и последний group by тоже сомнения наводит


Там сверху еще один select должен быть не скопировал
select Client_Id, GKO_Text, Sum(gko_numb) as gko_numb, Contract_ID, Lot from
(
27 июн 13, 11:43    [14490572]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с запросом...  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
ну и сделайте отдельную времянку для етого
GKO_Tuning gt on pag.Contract_ID=gt.Contract_ID and pag.Contract_ID in (Select distinct Contract_ID from #BuyersGKO)


все равно в обеих частях запроса одно и тоже
27 июн 13, 11:56    [14490674]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с запросом...  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
hanko_nikita
iap
пропущено...
А зачем в IN(SELECT ...) используется DISTINCT - не подскажете?


Это в тестовом варианте там одна строка, а так их там может быть много с одинаковым contract_id.
Ну и что? Хоть миллион! Зачем сначала дубли выбрасывать, а потом искать одну строку для IN?
27 июн 13, 11:56    [14490678]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с запросом...  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
А с каких это пор SUBSTRING считает с 0?
27 июн 13, 11:57    [14490682]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с запросом...  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
iap
Мистер Хенки
вы бы запрос причесали, алиасы что ли поставили - вам очевидно, где, к примеру находится поле GKO_Numb, а нам нет. Ну скрипт на создание таблиц, индексов, планы выполнения . А так статистику обновить - может все решится, или вот заранее подготовить временую табличку и вместо этого джойна использовать ее
inner join GKO_Tuning gt on d.Contract_ID=gt.Contract_ID and d.Contract_ID in (Select distinct Contract_ID from #BuyersGKO)
А зачем в IN(SELECT ...) используется DISTINCT - не подскажете?

не знаю, я вообще поверхностно смотрел запрос, это копи паст автора.
27 июн 13, 12:12    [14490804]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить