Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Запрос по остаткам на каждый день. Пара вопросов по запросу (число прочтений - 1353 )
ssk
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 04. Июня 2010
Пол: Мужской
Запрос по остаткам на каждый день. Пара вопросов по запросу
07. Сентября 2010 :: 10:58
Печать  
Два вопроса:

1. В этом запросе обращение к $РегистрОстаткиОбороты.ОстаткиТоваров встречается 3 раза. Нужно ли это место как-то переписать чтобы было 1 реальное обращение или sql сам это  делает?

2. select top 1 Остатки.ОстатокТовараКонечныйОстаток as ОстатокКон не возвращает имени колонки. тз.выбратьстроку() выводит данные правильно с числами, но у этой колонки нет заголовка.

Код
Выбрать все
select
ПустаяМатрица1.Период as [Период $Дата],
ПустаяМатрица1.Склад as [Склад $Справочник.Склады],
ПустаяМатрица1.Товар as [Товар $Справочник.Товары],
(select top 1 Остатки.ОстатокТовараКонечныйОстаток as ОстатокКон
from
$РегистрОстаткиОбороты.ОстаткиТоваров(:выбНачПериода,
		:выбКонПериода~,
		День,
		ДвиженияИГраницыПериода,,(Товар IN (SELECT val FROM #выбТовары)) AND (Склад IN (SELECT val FROM #выбСклады)),,
		ОстатокТовара) as Остатки
where Остатки.Период <= ПустаяМатрица1.Период order by Остатки.Период DESC)
from
(
select
ПустаяМатрица.Товар
,ПустаяМатрица.Склад
, ПустаяМатрица.Период
, ПустаяМатрица.ОстатокТовараКонечныйОстаток as Остаток

from
(
select
ТаблТоваров.Товар
, ТаблСкладов.Склад
, Период
,0 as ОстатокТовараКонечныйОстаток
From
(
select distinct
Товар
from
$РегистрОстаткиОбороты.ОстаткиТоваров(:выбНачПериода,
		:выбКонПериода~,
		День,
		ДвиженияИГраницыПериода,,(Товар IN (SELECT val FROM #выбТовары)) AND (Склад IN (SELECT val FROM #выбСклады)),,
		ОстатокТовара) ) AS ТаблТоваров,
(
select distinct
Склад
from
$РегистрОстаткиОбороты.ОстаткиТоваров(:выбНачПериода,
		:выбКонПериода~,
		День,
		ДвиженияИГраницыПериода,,(Товар IN (SELECT val FROM #выбТовары)) AND (Склад IN (SELECT val FROM #выбСклады)),,
		ОстатокТовара)) AS ТаблСкладов,
(

select distinct
Val as Период
from
#listdates) as Даты1) as ПустаяМатрица ) as ПустаяМатрица1 

  
Наверх
 
IP записан
 
ssk
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 04. Июня 2010
Пол: Мужской
Re: Запрос по остаткам на каждый день. Пара вопросов по запросу
Ответ #1 - 07. Сентября 2010 :: 12:07
Печать  
Со вторым пунктом разобрался. В другом месте алиас нужно писать:

(select top 1 Остатки.ОстатокТовараКонечныйОстаток
from
$РегистрОстаткиОбороты.ОстаткиТоваров(:выбНачПериода,
           :выбКонПериода~,
           День,
           ДвиженияИГраницыПериода,,(Товар IN (SELECT val FROM #выбТовары)) AND (Склад IN (SELECT val FROM #выбСклады)),,
           ОстатокТовара) as Остатки
where (Остатки.Период <= ПустаяМатрица1.Период) and (Остатки.Товар = ПустаяМатрица1.Товар) and (Остатки.Склад = ПустаяМатрица1.Склад) order by Остатки.Период DESC) as ОстатокКон


первый вопрос актуален. Влияет ли это повторение на производительность?
  
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос по остаткам на каждый день. Пара вопросов по запросу
Ответ #2 - 09. Сентября 2010 :: 11:18
Печать  
ssk писал(а) 07. Сентября 2010 :: 12:07:
первый вопрос актуален. Влияет ли это повторение на производительность?


Надо смотреть, у меня на 2-х разных серверах по разному считает, один раз как HASH JOIN, второй раз как Nested Loop, в итоге разница в скорости получается раза в 100. На 3 строках такой разницы может и не быть, но в моем случае, 6500 чтений против 7 миллионов.
  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать