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

Откуда:
Сообщений: 5
Хелп ми ! Подскажите к примеру имеется таблица A

ID , AdresID , NomenID, KOLVO,DATE_PRODAGI

Хочу получить таблицу типа

ID , AdresID , NomenID , (SUM (KOLVO) from A where DATE_PRODAGI between '01.01.2012' and '01.02.2012') AS 01,(SUM (KOLVO) from A where DATE_PRODAGI between '01.02.2012' and '01.03.2012') AS 02 И Т.Д.

В данном случае
select adresid , nomenid ,
(select sum (kolvo) from a a2 where DATE_PRODAGI between '01.01.2012' and '01.02.2012' and a2.adresid=a.adresid and a2.nomenid=a.nomenid )
,(select sum (kolvo) from a a2 where DATE_PRODAGI between '01.02.2012' and '01.03.2012' and a2.adresid=a.adresid and a2.nomenid=a.nomenid )
from a group by adresid , nomenid
При условии что записей накопилось несколько миллионов то время запроса ужасное , есть варианты как оптимизировать? Спасибо заранее.
30 янв 13, 14:10    [13850700]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизируем запрос вместе.  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
ну там индекс по (adresid , nomenid,date_prodagi) include(kolvo) и все такое
ну ище там если DATE_PRODAGI типа date
select
adresid 
, nomenid 
, DATE_PRODAGI 
,sum(kolvo)
from a group by adresid , nomenid,DATE_PRODAGI 
30 янв 13, 14:24    [13850817]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизируем запрос вместе.  [new]
Гость333
Member

Откуда:
Сообщений: 3683
select adresid , nomenid ,
       sum(case when DATE_PRODAGI between '01.01.2012' and '01.02.2012' then kolvo else null end),
       sum(case when DATE_PRODAGI between '01.02.2012' and '01.03.2012' then kolvo else null end)
from a
group by adresid , nomenid
30 янв 13, 14:57    [13851175]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизируем запрос вместе.  [new]
Frostich
Member

Откуда:
Сообщений: 5
Тип DATE_PRODAGI дата


Заполним таблицу
ID ADRESID NOMENID KOLVO DATE_PRODAGI
1 1 1 2 01.01.2012 00:00
2 2 1 35 01.01.2012 00:00
3 2 2 12 01.01.2012 00:00
4 1 1 12 02.02.2012 00:00
5 1 1 12 03.02.2012 00:00



при моем запросе
ADRESID NOMENID SUM as YNVAR SUM1
1 1 2 24
2 1 35
2 2 12


select
adresid
, nomenid
, DATE_PRODAGI
,sum(kolvo)
from a group by adresid , nomenid,DATE_PRODAGI

у тебя получается

ADRESID NOMENID DATE_PRODAGI SUM
1 1 01.01.2012 00:00 2
1 1 02.02.2012 00:00 12
1 1 03.02.2012 00:00 12
2 1 01.01.2012 00:00 35
2 2 01.01.2012 00:00 12



Хотя можно объединить ! и работает намного быстрее видимо я сам переморочился ,Спасибо Мистер Хенки
30 янв 13, 15:25    [13851395]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизируем запрос вместе.  [new]
Frostich
Member

Откуда:
Сообщений: 5
Гость333 ,Спасибо

ТО что надо !тема закрыта!
30 янв 13, 15:29    [13851425]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить