Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: оптимизация запроса (несколько запрос в один)  [new]
Добрый Э - Эх
Guest
Ну так убери его и попробуй ещё раз...
Habib Karimov
Merdoc
Habib Karimov,
Попробуйте такой

with t3 as 
(
select t2.*, ROW_NUMBER() over(order by t2.ClientID desc) as ID, *, CONCAT(t2.ClientID, t2.Product) AS Code
from 
(
SELECT so.ClientID, 'All Channels' as CustomerGroup, so.StatementID, so.Brand, so.Product,
Sum(so.Amount) Amount, Sum(so.Value_CP) Value_CP
FROM RG_SalesOut_Report so
WHERE so.Block=0 AND so.[All Sources]='SalesOUT' and so.Brand in('Brand1', 'Brand2')
GROUP BY so.ClientID, so.CustomerGroup, so.StatementID, so.Brand, so.Product
HAVING Sum(so.Value_CP)>0 AND Sum(so.Amount)>0 
) t2
ORDER BY t2.ClientID DESC, t2.Product, t2.StatementID desc
)
select tab1.ID, tab2.ID as ID_2, tab1.ClientID, tab2.ClientID as cl_ID2, tab1.CustomerGroup, tab1.StatementID, tab1.Brand,
tab1.Product, tab1.Amount, tab1.Value_CP, IIF(tab1.code=tab2.code, DATEDIFF(MONTH,tab2.StatementID, tab1.StatementID), 0) AS M_SALES
FROM t3 tab1
RIGHT JOIN t3 tab2
ON tab1.ID=tab2.ID-1
where tab1.StatementID>='2013-01-01'
order by tab1.ID asc


использую ваш код, но там ошибка, сначала ругался на into #t1 - зачем нам здесь into?
удалил into #t1
но ругается на order by
ошибка
The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP, OFFSET or FOR XML is also specified.

спасибо за потраченное драгоценное время
17 июн 14, 13:31    [16175591]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (несколько запрос в один)  [new]
Добрый Э - Эх
Guest
Merdoc
Добрый Э - Эх,
Это он точно осилит )
не осилил...
17 июн 14, 13:35    [16175620]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (несколько запрос в один)  [new]
Habib Karimov
Member

Откуда: Москва
Сообщений: 67
Добрый Э - Эх,
возникла другая ошибка
ошибка:
The column 'ClientID' was specified multiple times for 't3'.
17 июн 14, 13:40    [16175672]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (несколько запрос в один)  [new]
Habib Karimov
Member

Откуда: Москва
Сообщений: 67
Добрый Э - Эх
Merdoc
Добрый Э - Эх,
Это он точно осилит )
не осилил...


еще это не конец, мы же учимся
у всех есть недостатки
я честно не силен в создании сложных sql queries
17 июн 14, 13:42    [16175687]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (несколько запрос в один)  [new]
Merdoc
Member

Откуда: Новосибирск
Сообщений: 103
Habib Karimov,
Нормально, все учимся. Даже те кто много о себе думает и много получает должны учится (к таким особо не отношусь, просто IMXO)

С ошибкой "The column 'ClientID' was specified multiple times for 't3'" порешали?
Если нет - попробуйте выполнить запрос из t3 отдельно, вдруг в select есть несколько ClientID. Если глаз замылился и не находите - можно расписать t2.* на конкретные колонки, которые потом используете в конечной выборке данных.
17 июн 14, 13:49    [16175743]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (несколько запрос в один)  [new]
yaxta
Member

Откуда: азербайджан,баку
Сообщений: 518
Habib Karimov
Добрый Э - Эх
пропущено...
не осилил...


еще это не конец, мы же учимся
у всех есть недостатки
я честно не силен в создании сложных sql queries


пока ето не сложный запрос


к стате у тебя каждый скрипт по отделно нормально работает?
18 июн 14, 09:02    [16179745]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (несколько запрос в один)  [new]
yaxta
Member

Откуда: азербайджан,баку
Сообщений: 518
yaxta,

у тебя сервер 2008?
18 июн 14, 09:06    [16179758]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (несколько запрос в один)  [new]
Добрый Э - Эх
Guest
yaxta,

наличие в запросах ТС таких синтаксических конструкций, как IIF и CONCAT, как бы намекают, что сервер - 2012-й.
18 июн 14, 09:08    [16179769]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (несколько запрос в один)  [new]
yaxta
Member

Откуда: азербайджан,баку
Сообщений: 518
Добрый Э - Эх,

Могли бы вы предоставить некоторые примерные данные + структуру таблицы?
18 июн 14, 09:26    [16179843]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (несколько запрос в один)  [new]
Habib Karimov
Member

Откуда: Москва
Сообщений: 67
yaxta
Habib Karimov
пропущено...


еще это не конец, мы же учимся
у всех есть недостатки
я честно не силен в создании сложных sql queries


пока ето не сложный запрос


к стате у тебя каждый скрипт по отделно нормально работает?


спасибо за участие,
да, в отдельности все работает хорошо
но мне придется запустить 4 раза
использую в своих отчетах результат 4 запроса
18 июн 14, 09:59    [16180005]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (несколько запрос в один)  [new]
Habib Karimov
Member

Откуда: Москва
Сообщений: 67
yaxta
yaxta,

у тебя сервер 2008?


нет у меня 2012
18 июн 14, 10:00    [16180012]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (несколько запрос в один)  [new]
yaxta
Member

Откуда: азербайджан,баку
Сообщений: 518
Habib Karimov,

да понил

Могли бы вы предоставить некоторые примерные данные + структуру таблицы?
18 июн 14, 10:02    [16180037]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (несколько запрос в один)  [new]
Добрый Э - Эх
Guest
yaxta
Добрый Э - Эх,

Могли бы вы предоставить некоторые примерные данные + структуру таблицы?
Я-то мог. Но есть одна загвоздка - ни я автор этого топика :)
18 июн 14, 10:16    [16180137]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (несколько запрос в один)  [new]
Habib Karimov
Member

Откуда: Москва
Сообщений: 67
yaxta
Habib Karimov,

да понил

Могли бы вы предоставить некоторые примерные данные + структуру таблицы?


спасибо за потраченное драгоценное время
сейчас использую эти запросы:

--SKU_Total

Запрос 1

SELECT so.ClientID, 'All Channels' as CustomerGroup, so.StatementID, so.Brand, so.Product,
Sum(so.Amount) Amount, Sum(so.Value_CP) Value_CP
into #t1
FROM RG_SalesOut_Report so
WHERE so.Block=0 AND so.[All Sources]='SalesOUT'AND so.Value_CP>0 AND so.Amount>0 AND
so.Brand in('Brand 1', 'Brand 2')
GROUP BY so.ClientID, so.CustomerGroup, so.StatementID, so.Brand, so.Product  

Запрос 2

select t1.ClientID, t1.CustomerGroup, t1.StatementID, t1.Brand, t1.Product,
Sum(t1.Amount) AS Amount, Sum(t1.Value_CP) AS Value_CP
into #t2
from #t1 t1
group by t1.ClientID, t1.CustomerGroup, t1.StatementID, t1.Brand, t1.Product

Запрос 3

select ROW_NUMBER() over(order by t2.ClientID desc) as ID, *, CONCAT(t2.ClientID, t2.Product) AS Code
into #t3
from #t2 t2
group by t2.ClientID, t2.CustomerGroup, t2.StatementID, t2.Brand, t2.Product, t2.Amount, t2.Value_CP, CONCAT(t2.ClientID, t2.Product)
ORDER BY t2.ClientID DESC, t2.Product, t2.StatementID desc

Запрос 4

select tab1.ClientID, tab1.CustomerGroup, convert(varchar,(CONVERT(date,tab1.StatementID,104)),104) AS StatementID, tab1.Brand,
tab1.Product, tab1.Amount, tab1.Value_CP, IIF(tab1.code=tab2.code, DATEDIFF(MONTH,tab2.StatementID, tab1.StatementID), 0) AS M_SALES
FROM #t3 tab1
RIGHT JOIN #t3 tab2
ON tab1.ID=tab2.ID-1
where tab1.StatementID >= '01.01.2013'
order by tab1.ID asc


выложил структуру таблицы (см. влож.)

К сообщению приложен файл (структура таблицы.xlsx - 144Kb) cкачать
18 июн 14, 10:31    [16180250]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (несколько запрос в один)  [new]
Добрый Э - Эх
Guest
Habib Karimov,

какие-то из уже предложенных тут рекомендаций, кроме переноса условий фильтрации из HAVING в WHERE, пробовал воплотить в жизнь? если пробовал, то что не получилось? а переписанный мердоком запрос смог запустить? он тебя чем-то не устроил?
18 июн 14, 10:34    [16180272]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (несколько запрос в один)  [new]
Habib Karimov
Member

Откуда: Москва
Сообщений: 67
в таблице есть 11 666 036 строк
ежемесячно добавляется примерно 1,5 млн строк
18 июн 14, 10:35    [16180276]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (несколько запрос в один)  [new]
Habib Karimov
Member

Откуда: Москва
Сообщений: 67
Добрый Э - Эх
Habib Karimov,

какие-то из уже предложенных тут рекомендаций, кроме переноса условий фильтрации из HAVING в WHERE, пробовал воплотить в жизнь? если пробовал, то что не получилось? а переписанный мердоком запрос смог запустить? он тебя чем-то не устроил?


вчера подробно написал, какие ошибки возникли
прошу прочитать вчерашнюю переписку
сегодня еще раз надо попробовать предложение мердока
спасибо
18 июн 14, 10:55    [16180439]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (несколько запрос в один)  [new]
yaxta
Member

Откуда: азербайджан,баку
Сообщений: 518
Habib Karimov,

ок

но к стате

Я не думаю, что есть необходимость в запросе 2, как вы уже группировки и агрегирования на тех же столбцов в запросе 1.

Можете ли вы проверить, является ли набор результатов от запроса 1 и запроса 2 отличается?

ето вы написали


SELECT so.ClientID, 'All Channels' as CustomerGroup, so.StatementID, so.Brand, so.Product,
Sum(so.Amount) Amount, Sum(so.Value_CP) Value_CP
into #t1
FROM RG_SalesOut_Report so
WHERE so.Block=0 AND so.[All Sources]='SalesOUT'
GROUP BY so.ClientID, so.CustomerGroup, so.StatementID, so.Brand, so.Product
HAVING Sum(so.Value_CP)>0 AND Sum(so.Amount)>0 AND
so.Brand in('Brand1', 'Brand2')

select * from #t1

select t1.ClientID, t1.CustomerGroup, t1.StatementID, t1.Brand, t1.Product,
Sum(t1.Amount) AS Amount, Sum(t1.Value_CP) AS Value_CP
into #t2
from #t1 t1
group by t1.ClientID, t1.CustomerGroup, t1.StatementID, t1.Brand, t1.Product

Select * from #t2
18 июн 14, 10:59    [16180481]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (несколько запрос в один)  [new]
yaxta
Member

Откуда: азербайджан,баку
Сообщений: 518
yaxta,

вы азербайджанец да?
18 июн 14, 11:02    [16180504]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (несколько запрос в один)  [new]
Добрый Э - Эх
Guest
Habib Karimov
вчера подробно написал, какие ошибки возникли
прошу прочитать вчерашнюю переписку
сегодня еще раз надо попробовать предложение мердока
спасибо
я переписку прекрасно помню. там и рекомендации были, как искать дублированные имена полей. я, собственно, за это и спрашивал - какие-то рекомендации были применены? что не получилось в процессе применения этих рекомендаций?
18 июн 14, 11:09    [16180550]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (несколько запрос в один)  [new]
Habib Karimov
Member

Откуда: Москва
Сообщений: 67
yaxta
Habib Karimov,

ок

но к стате

Я не думаю, что есть необходимость в запросе 2, как вы уже группировки и агрегирования на тех же столбцов в запросе 1.

Можете ли вы проверить, является ли набор результатов от запроса 1 и запроса 2 отличается?

ето вы написали


SELECT so.ClientID, 'All Channels' as CustomerGroup, so.StatementID, so.Brand, so.Product,
Sum(so.Amount) Amount, Sum(so.Value_CP) Value_CP
into #t1
FROM RG_SalesOut_Report so
WHERE so.Block=0 AND so.[All Sources]='SalesOUT'
GROUP BY so.ClientID, so.CustomerGroup, so.StatementID, so.Brand, so.Product
HAVING Sum(so.Value_CP)>0 AND Sum(so.Amount)>0 AND
so.Brand in('Brand1', 'Brand2')

select * from #t1

select t1.ClientID, t1.CustomerGroup, t1.StatementID, t1.Brand, t1.Product,
Sum(t1.Amount) AS Amount, Sum(t1.Value_CP) AS Value_CP
into #t2
from #t1 t1
group by t1.ClientID, t1.CustomerGroup, t1.StatementID, t1.Brand, t1.Product

Select * from #t2


в 1 запросе агрегируется первоначальные исходные данные, затем выставляется в колонку CustomerGroup "All Channels"
здесь агрегирует, но не обращает внимание на колонку CustomerGroup
а в запросе 2 обращается внимание на CustomerGroup

в запросе 1 - 5,791 млн. строк из 11,666
в запросе 2 - 5,775 млн. строк из 11,666
18 июн 14, 11:25    [16180683]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (несколько запрос в один)  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
yaxta
yaxta,

вы азербайджанец да?
Сам себя спрашивает!
18 июн 14, 11:28    [16180712]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (несколько запрос в один)  [new]
Glory
Member

Откуда:
Сообщений: 104751
Habib Karimov
в 1 запросе агрегируется первоначальные исходные данные, затем выставляется в колонку CustomerGroup "All Channels"
здесь агрегирует, но не обращает внимание на колонку CustomerGroup
а в запросе 2 обращается внимание на CustomerGroup

Для получения агрегатов с итогами уже давно придумали GROUP BY ... WITH ROLLUP

ЗЫ
Мне вот интересно - неужели после окончания обсуждения все будут уверены, что они _оптимизировали_ запрос
18 июн 14, 11:29    [16180726]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (несколько запрос в один)  [new]
Habib Karimov
Member

Откуда: Москва
Сообщений: 67
Glory
Habib Karimov
в 1 запросе агрегируется первоначальные исходные данные, затем выставляется в колонку CustomerGroup "All Channels"
здесь агрегирует, но не обращает внимание на колонку CustomerGroup
а в запросе 2 обращается внимание на CustomerGroup

Для получения агрегатов с итогами уже давно придумали GROUP BY ... WITH ROLLUP

ЗЫ
Мне вот интересно - неужели после окончания обсуждения все будут уверены, что они _оптимизировали_ запрос


к сожалению, пока нет никакой оптимизации
до сих пор на первоначальном уровне

Glory
Для получения агрегатов с итогами уже давно придумали GROUP BY ... WITH ROLLUP


к сожалению GROUP BY ... WITH ROLLUP не поможет нам для соединения этих запросов, или ошибаюсь?
18 июн 14, 11:34    [16180767]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса (несколько запрос в один)  [new]
yaxta
Member

Откуда: азербайджан,баку
Сообщений: 518
iap
yaxta
yaxta,

вы азербайджанец да?
Сам себя спрашивает!


новерно да
18 июн 14, 11:35    [16180775]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить