Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3]      все
 Re: Проблема с оптимизацией IS NOT NULL  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6422
Nitro_Junkie,

автор
В любом случае этот запрос у вас не выполнится, потому как план с nested loop будет, я дополнил это уже в статье.

это потому что планы с NL никогда не выполняются?
14 авг 19, 11:51    [21948991]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оптимизацией IS NOT NULL  [new]
Nitro_Junkie
Member

Откуда:
Сообщений: 1038
TaPaK
Nitro_Junkie,

автор
В любом случае этот запрос у вас не выполнится, потому как план с nested loop будет, я дополнил это уже в статье.

это потому что планы с NL никогда не выполняются?

Если там 10к записей то нет. Я не дождался во всяком случае выполнения вот такого запроса:
SELECT shipmentDetail.id, b.quantity
	FROM shipmentDetail 
	JOIN shipment ON shipmentDetail.shipment = shipment.id
	outer apply (select quantity from balance(shipment.date) where stock = shipment.stock AND product = shipmentDetail.product) b
	WHERE shipmentDetail.id%1000 = 0
14 авг 19, 12:04    [21949019]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оптимизацией IS NOT NULL  [new]
Konst_One
Member

Откуда:
Сообщений: 11422
shipmentDetail.id%1000

извращение ещё то, вы как будто специально ставите сервер в позу своими запросами
14 авг 19, 12:07    [21949025]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оптимизацией IS NOT NULL  [new]
Nitro_Junkie
Member

Откуда:
Сообщений: 1038
Konst_One
shipmentDetail.id%1000

извращение ещё то, вы как будто специально ставите сервер в позу своими запросами


Тут любое условие где >10к записей подойдет.
14 авг 19, 12:08    [21949026]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оптимизацией IS NOT NULL  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6630
Nitro_Junkie,

и на какую оптимизация Вы рассчитываете в этом условии?

WHERE shipmentDetail.id%1000 = 0
14 авг 19, 12:11    [21949034]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оптимизацией IS NOT NULL  [new]
invm
Member

Откуда: Москва
Сообщений: 8714
Nitro_Junkie
потому как план с nested loop будет
Серьезно?
+
use tempdb;
go

create table dbo.t1 (id int primary key, dt datetime, a int);
create table dbo.t2 (id int primary key, t1_id int, dt datetime, b int);

update statistics dbo.t1 with rowcount = 100000;
update statistics dbo.t2 with rowcount = 10000000;
go

create function dbo.fn1
(
 @dt datetime
)
returns table
as
return
 select
  id, dt, t1_id, b
 from
  dbo.t2
 where
  dt = @dt;
go

set statistics profile on;

select
 a.id, a.a, b.b
from
 dbo.t1 a outer apply
 (select b from dbo.fn1(a.dt) where t1_id = a.id) b;

set statistics profile off;
go

drop function dbo.fn1;
drop table dbo.t1, dbo.t2;
go

select   a.id, a.a, b.b  from   dbo.t1 a outer apply   (select b from dbo.fn1(a.dt) where t1_id = a.id) b
|--Parallelism(Gather Streams)
|--Hash Match(Left Outer Join, HASH:([a].[dt], [a].[id])=([tempdb].[dbo].[t2].[dt], [tempdb].[dbo].[t2].[t1_id]), RESIDUAL:([tempdb].[dbo].[t2].[dt]=[tempdb].[dbo].[t1].[dt] as [a].[dt] AND [tempdb].[dbo].[t2].[t1_id]=[tempdb].[dbo].[t1].[id] as [a].[id]))
|--Bitmap(HASH:([a].[dt], [a].[id]), DEFINE:([Bitmap1004]))
| |--Parallelism(Repartition Streams, Hash Partitioning, PARTITION COLUMNS:([a].[dt], [a].[id]))
| |--Clustered Index Scan(OBJECT:([tempdb].[dbo].[t1].[PK__t1__3213E83F86CDC1E6] AS [a]))
|--Compute Scalar(DEFINE:([Expr1003]=[tempdb].[dbo].[t2].[b]))
|--Parallelism(Repartition Streams, Hash Partitioning, PARTITION COLUMNS:([tempdb].[dbo].[t2].[dt], [tempdb].[dbo].[t2].[t1_id]))
|--Clustered Index Scan(OBJECT:([tempdb].[dbo].[t2].[PK__t2__3213E83F436C000F]), WHERE:(PROBE([Bitmap1004],[tempdb].[dbo].[t2].[dt],[tempdb].[dbo].[t2].[t1_id])))


ЗЫ: Гарантированный NL будет, если в в apply или в функции будет select top(...) ...
14 авг 19, 12:15    [21949046]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оптимизацией IS NOT NULL  [new]
Nitro_Junkie
Member

Откуда:
Сообщений: 1038
Владислав Колосов
Nitro_Junkie,

и на какую оптимизация Вы рассчитываете в этом условии?

WHERE shipmentDetail.id%1000 = 0


На то что hash join будет. Как если грубо говоря сделать:

SELECT shipmentDetail.id, b.quantity
	FROM shipmentDetail 
	JOIN shipment ON shipmentDetail.shipment = shipment.id
	LEFT JOIN balance(shipment.date) ON stock = shipment.stock AND product = shipmentDetail.product b
	WHERE shipmentDetail.id%1000 = 0


А если быть точным, вот так, как делает lsFusion:

SELECT shipmentDetail.id, b.quantity
	FROM shipmentDetail 
	JOIN shipment ON shipmentDetail.shipment = shipment.id
	JOIN (SELECT stock, product, dates.date, SUM(quantity) AS quantity
		FROM
			(SELECT receipt.stock, product, receipt.date, quantity
			FROM receiptDetail 
				JOIN receipt ON receiptDetail.receipt = receipt.id
			UNION ALL 
			SELECT shipment.stock, product, shipment.date, -quantity
				FROM shipmentDetail 
				JOIN shipment ON shipmentDetail.shipment = shipment.id
			) details
		JOIN 
			(SELECT shipment.date
				FROM shipmentDetail 
				JOIN shipment ON shipmentDetail.shipment = shipment.id
				WHERE shipmentDetail.id %1000 = 0
				GROUP BY shipment.date
			) dates ON details.date < dates.date
		GROUP BY stock, product, dates.date
	) b ON b.stock = shipment.stock AND b.product = shipmentDetail.product AND b.date = shipment.date
	WHERE shipmentDetail.id %1000 = 0


Это все есть в статье, к которой тут все норовят придраться.
14 авг 19, 12:16    [21949048]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оптимизацией IS NOT NULL  [new]
Nitro_Junkie
Member

Откуда:
Сообщений: 1038
invm
Nitro_Junkie
потому как план с nested loop будет
Серьезно?
+
use tempdb;
go

create table dbo.t1 (id int primary key, dt datetime, a int);
create table dbo.t2 (id int primary key, t1_id int, dt datetime, b int);

update statistics dbo.t1 with rowcount = 100000;
update statistics dbo.t2 with rowcount = 10000000;
go

create function dbo.fn1
(
 @dt datetime
)
returns table
as
return
 select
  id, dt, t1_id, b
 from
  dbo.t2
 where
  dt = @dt;
go

set statistics profile on;

select
 a.id, a.a, b.b
from
 dbo.t1 a outer apply
 (select b from dbo.fn1(a.dt) where t1_id = a.id) b;

set statistics profile off;
go

drop function dbo.fn1;
drop table dbo.t1, dbo.t2;
go

select   a.id, a.a, b.b  from   dbo.t1 a outer apply   (select b from dbo.fn1(a.dt) where t1_id = a.id) b
|--Parallelism(Gather Streams)
|--Hash Match(Left Outer Join, HASH:([a].[dt], [a].[id])=([tempdb].[dbo].[t2].[dt], [tempdb].[dbo].[t2].[t1_id]), RESIDUAL:([tempdb].[dbo].[t2].[dt]=[tempdb].[dbo].[t1].[dt] as [a].[dt] AND [tempdb].[dbo].[t2].[t1_id]=[tempdb].[dbo].[t1].[id] as [a].[id]))
|--Bitmap(HASH:([a].[dt], [a].[id]), DEFINE:([Bitmap1004]))
| |--Parallelism(Repartition Streams, Hash Partitioning, PARTITION COLUMNS:([a].[dt], [a].[id]))
| |--Clustered Index Scan(OBJECT:([tempdb].[dbo].[t1].[PK__t1__3213E83F86CDC1E6] AS [a]))
|--Compute Scalar(DEFINE:([Expr1003]=[tempdb].[dbo].[t2].[b]))
|--Parallelism(Repartition Streams, Hash Partitioning, PARTITION COLUMNS:([tempdb].[dbo].[t2].[dt], [tempdb].[dbo].[t2].[t1_id]))
|--Clustered Index Scan(OBJECT:([tempdb].[dbo].[t2].[PK__t2__3213E83F436C000F]), WHERE:(PROBE([Bitmap1004],[tempdb].[dbo].[t2].[dt],[tempdb].[dbo].[t2].[t1_id])))


ЗЫ: Гарантированный NL будет, если в в apply или в функции будет select top(...) ...


Гарантированный NL в данном случае будет (а не вообще). Когда у вас есть параметр, для которого таблицы и предиката = нет (есть только на >, < типа остатка / задолженности на дату как в примере).
14 авг 19, 12:19    [21949056]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оптимизацией IS NOT NULL  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6630
Nitro_Junkie,

автор
как делает lsFusion


Хм, это очень плохой запрос, поднять его производительность можно только методом грубой силы (оборудованием). В нем есть и сортировки, и просмотры, предполагаю, что и параллельный план выполнения не может быть для него построен.
14 авг 19, 12:33    [21949093]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оптимизацией IS NOT NULL  [new]
invm
Member

Откуда: Москва
Сообщений: 8714
Nitro_Junkie
Гарантированный NL в данном случае будет (а не вообще). Когда у вас есть параметр, для которого таблицы и предиката = нет
Когда нет предиката эквивалентности как раз и будет гарантиролванный NL, что для join, что для apply.
14 авг 19, 12:37    [21949099]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оптимизацией IS NOT NULL  [new]
Nitro_Junkie
Member

Откуда:
Сообщений: 1038
Владислав Колосов
Nitro_Junkie,

автор
как делает lsFusion


Хм, это очень плохой запрос, поднять его производительность можно только методом грубой силы (оборудованием). В нем есть и сортировки, и просмотры, предполагаю, что и параллельный план выполнения не может быть для него построен.


Ну он точно лучше чем базовый (который вешает все намертво). И хорошо параллелится (с чего вдруг он не должен этого делать).
14 авг 19, 12:49    [21949120]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оптимизацией IS NOT NULL  [new]
Nitro_Junkie
Member

Откуда:
Сообщений: 1038
invm
Nitro_Junkie
Гарантированный NL в данном случае будет (а не вообще). Когда у вас есть параметр, для которого таблицы и предиката = нет
Когда нет предиката эквивалентности как раз и будет гарантиролванный NL, что для join, что для apply.


Когда есть предикат эквивалентности то и UDF и APPLY не нужны. Можно построить обычный VIEW, просто с join'ить его а Join Predicate Push Down все сам сделает. А смысл пункта в статье именно в таких параметрах.
14 авг 19, 12:51    [21949124]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оптимизацией IS NOT NULL  [new]
invm
Member

Откуда: Москва
Сообщений: 8714
Nitro_Junkie
Когда есть предикат эквивалентности то и UDF и APPLY не нужны.
А когда нету, то нужны?

Вы просто не знаете как решать подобные задачи.
CREATE FUNCTION balance (
    @date DATE,
    @stock ... = null,
    @product ... = null
)
RETURNS TABLE
AS
RETURN
SELECT stock, product, SUM(quantity) AS quantity
	FROM
		(SELECT receipt.stock, product, quantity
		FROM receiptDetail 
			JOIN receipt ON receiptDetail.receipt = receipt.id
			WHERE @stock is null and @product is null and receipt.date < @date
		UNION ALL 
		SELECT receipt.stock, product, quantity
		FROM receiptDetail 
			JOIN receipt ON receiptDetail.receipt = receipt.id
			WHERE @stock is not null and @product is not null and receipt.date < @date and stock = @stock and product = @product
		UNION ALL 
        SELECT shipment.stock, product, -quantity
			FROM shipmentDetail 
			JOIN shipment ON shipmentDetail.shipment = shipment.id
			WHERE @stock is null and @product is null and shipment.date < @date
		UNION ALL 
        SELECT shipment.stock, product, -quantity
			FROM shipmentDetail 
			JOIN shipment ON shipmentDetail.shipment = shipment.id
			WHERE @stock is not null and @product is not null and shipment.date < @date) details and stock = @stock and product = @product
	GROUP BY stock, product

SELECT shipmentDetail.id, b.quantity
	FROM shipmentDetail 
	JOIN shipment ON shipmentDetail.shipment = shipment.id
	outer apply balance(shipment.date, shipment.stock, shipmentDetail.product) b
	WHERE shipmentDetail.id%1000 = 0
14 авг 19, 13:29    [21949182]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оптимизацией IS NOT NULL  [new]
Nitro_Junkie
Member

Откуда:
Сообщений: 1038
invm
Nitro_Junkie
Когда есть предикат эквивалентности то и UDF и APPLY не нужны.
А когда нету, то нужны?

Вы просто не знаете как решать подобные задачи.
CREATE FUNCTION balance (
    @date DATE,
    @stock ... = null,
    @product ... = null
)
RETURNS TABLE
AS
RETURN
SELECT stock, product, SUM(quantity) AS quantity
	FROM
		(SELECT receipt.stock, product, quantity
		FROM receiptDetail 
			JOIN receipt ON receiptDetail.receipt = receipt.id
			WHERE @stock is null and @product is null and receipt.date < @date
		UNION ALL 
		SELECT receipt.stock, product, quantity
		FROM receiptDetail 
			JOIN receipt ON receiptDetail.receipt = receipt.id
			WHERE @stock is not null and @product is not null and receipt.date < @date and stock = @stock and product = @product
		UNION ALL 
        SELECT shipment.stock, product, -quantity
			FROM shipmentDetail 
			JOIN shipment ON shipmentDetail.shipment = shipment.id
			WHERE @stock is null and @product is null and shipment.date < @date
		UNION ALL 
        SELECT shipment.stock, product, -quantity
			FROM shipmentDetail 
			JOIN shipment ON shipmentDetail.shipment = shipment.id
			WHERE @stock is not null and @product is not null and shipment.date < @date) details and stock = @stock and product = @product
	GROUP BY stock, product

SELECT shipmentDetail.id, b.quantity
	FROM shipmentDetail 
	JOIN shipment ON shipmentDetail.shipment = shipment.id
	outer apply balance(shipment.date, shipment.stock, shipmentDetail.product) b
	WHERE shipmentDetail.id%1000 = 0


Это вы к чему? Я имел ввиду что если бы запрос был на равенство date, то ни UDF ни APPLY не нужны были бы, можно было бы VIEW и JOIN обойтись.

Ну и в том что вы кинули тот же дурацкий план с nested loops:

SELECT shipmentDetail.id, b.quantity   FROM shipmentDetail    JOIN shipment ON shipmentDetail.shipment = shipment.id   outer apply pbalance(shipment.date, shipment.stock, shipmentDetail.product) b   WHERE shipmentDetail.id%1000 = 0 OPTION (MAXDOP 1)
  |--Nested Loops(Left Outer Join, OUTER REFERENCES:([test].[dbo].[shipmentdetail].[product], [test].[dbo].[shipment].[date], [test].[dbo].[shipment].[stock]))
       |--Hash Match(Inner Join, HASH:([test].[dbo].[shipmentdetail].[shipment])=([test].[dbo].[shipment].[id]))
       |    |--Index Scan(OBJECT:([test].[dbo].[shipmentdetail].[shipmentdetail_p_s]),  WHERE:([test].[dbo].[shipmentdetail].[id]%(1000)=(0)))
       |    |--Clustered Index Scan(OBJECT:([test].[dbo].[shipment].[PK__shipment__3213E83F4B7B4D07]))
       |--Compute Scalar(DEFINE:([Expr1025]=CASE WHEN [Expr1033]=(0) THEN NULL ELSE [Expr1034] END))
            |--Stream Aggregate(DEFINE:([Expr1033]=COUNT_BIG([Union1024]), [Expr1034]=SUM([Union1024])))
                 |--Concatenation
                      |--Nested Loops(Inner Join, OUTER REFERENCES:([test].[dbo].[receiptdetail].[receipt]))
                      |    |--Nested Loops(Inner Join, OUTER REFERENCES:([test].[dbo].[receiptdetail].[id]))
                      |    |    |--Filter(WHERE:(STARTUP EXPR([test].[dbo].[shipment].[stock] IS NULL AND [test].[dbo].[shipmentdetail].[product] IS NULL)))
                      |    |    |    |--Index Seek(OBJECT:([test].[dbo].[receiptdetail].[receiptdetail_product_fk]), SEEK:([test].[dbo].[receiptdetail].[product]=[test].[dbo].[shipmentdetail].[product]) ORDERED FORWARD)
                      |    |    |--Clustered Index Seek(OBJECT:([test].[dbo].[receiptdetail].[PK__receiptd__3213E83FE8063B8C]), SEEK:([test].[dbo].[receiptdetail].[id]=[test].[dbo].[receiptdetail].[id]) LOOKUP ORDERED FORWARD)
                      |    |--Clustered Index Seek(OBJECT:([test].[dbo].[receipt].[PK__receipt__3213E83FE2F580DF]), SEEK:([test].[dbo].[receipt].[id]=[test].[dbo].[receiptdetail].[receipt]),  WHERE:([test].[dbo].[receipt].[stock]=[test].[dbo].[shipment].[stock] AND [test].[dbo].[receipt].[date]<[test].[dbo].[shipment].[date]) ORDERED FORWARD)
                      |--Nested Loops(Inner Join, OUTER REFERENCES:([test].[dbo].[receiptdetail].[receipt]))
                      |    |--Filter(WHERE:(STARTUP EXPR([test].[dbo].[shipment].[stock] IS NOT NULL AND [test].[dbo].[shipmentdetail].[product] IS NOT NULL)))
                      |    |    |--Index Spool(SEEK:([test].[dbo].[receiptdetail].[product]=[test].[dbo].[shipmentdetail].[product]))
                      |    |         |--Clustered Index Scan(OBJECT:([test].[dbo].[receiptdetail].[PK__receiptd__3213E83FE8063B8C]))
                      |    |--Clustered Index Seek(OBJECT:([test].[dbo].[receipt].[PK__receipt__3213E83FE2F580DF]), SEEK:([test].[dbo].[receipt].[id]=[test].[dbo].[receiptdetail].[receipt]),  WHERE:([test].[dbo].[receipt].[stock]=[test].[dbo].[shipment].[stock] AND [test].[dbo].[receipt].[date]<[test].[dbo].[shipment].[date]) ORDERED FORWARD)
                      |--Nested Loops(Inner Join, OUTER REFERENCES:([test].[dbo].[shipmentdetail].[shipment], [Expr1031]) WITH UNORDERED PREFETCH)
                      |    |--Filter(WHERE:(STARTUP EXPR([test].[dbo].[shipment].[stock] IS NULL AND [test].[dbo].[shipmentdetail].[product] IS NULL)))
                      |    |    |--Index Spool(SEEK:([test].[dbo].[shipmentdetail].[product]=[test].[dbo].[shipmentdetail].[product]))
                      |    |         |--Compute Scalar(DEFINE:([Expr1016]= -[test].[dbo].[shipmentdetail].[quantity]))
                      |    |              |--Clustered Index Scan(OBJECT:([test].[dbo].[shipmentdetail].[PK__shipment__3213E83F996CFFF4]))
                      |    |--Clustered Index Seek(OBJECT:([test].[dbo].[shipment].[PK__shipment__3213E83F4B7B4D07]), SEEK:([test].[dbo].[shipment].[id]=[test].[dbo].[shipmentdetail].[shipment]),  WHERE:([test].[dbo].[shipment].[stock]=[test].[dbo].[shipment].[stock] AND [test].[dbo].[shipment].[date]<[test].[dbo].[shipment].[date]) ORDERED FORWARD)
                      |--Nested Loops(Inner Join, OUTER REFERENCES:([test].[dbo].[shipmentdetail].[shipment], [Expr1032]) WITH UNORDERED PREFETCH)
                           |--Filter(WHERE:(STARTUP EXPR([test].[dbo].[shipment].[stock] IS NOT NULL AND [test].[dbo].[shipmentdetail].[product] IS NOT NULL)))
                           |    |--Index Spool(SEEK:([test].[dbo].[shipmentdetail].[product]=[test].[dbo].[shipmentdetail].[product]))
                           |         |--Compute Scalar(DEFINE:([Expr1021]= -[test].[dbo].[shipmentdetail].[quantity]))
                           |              |--Clustered Index Scan(OBJECT:([test].[dbo].[shipmentdetail].[PK__shipment__3213E83F996CFFF4]))
                           |--Clustered Index Seek(OBJECT:([test].[dbo].[shipment].[PK__shipment__3213E83F4B7B4D07]), SEEK:([test].[dbo].[shipment].[id]=[test].[dbo].[shipmentdetail].[shipment]),  WHERE:([test].[dbo].[shipment].[stock]=[test].[dbo].[shipment].[stock] AND [test].[dbo].[shipment].[date]<[test].[dbo].[shipment].[date]) ORDERED FORWARD)
14 авг 19, 14:14    [21949276]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оптимизацией IS NOT NULL  [new]
invm
Member

Откуда: Москва
Сообщений: 8714
Nitro_Junkie
Ну и в том что вы кинули тот же дурацкий план с nested loops
План не дурацкий, а нормальный для вашей задачи. Ибо другого не будет.
Предложенные модификации позволят, при наличии соответствующих индексов, уменьшить объем перелопачиваемых данных.

Проблема у вас не в NL и плохости SQL, а в выбранной модели данных - отсутствует таблица текущего наличия. О чем уже не один раз писалось.
14 авг 19, 16:10    [21949401]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оптимизацией IS NOT NULL  [new]
Nitro_Junkie
Member

Откуда:
Сообщений: 1038
invm
отсутствует таблица текущего наличия

Что за таблица текущего наличия?
14 авг 19, 16:45    [21949445]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оптимизацией IS NOT NULL  [new]
invm
Member

Откуда: Москва
Сообщений: 8714
Nitro_Junkie
Что за таблица текущего наличия?
Таблица, где хранятся текущие остатки.
14 авг 19, 16:49    [21949449]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оптимизацией IS NOT NULL  [new]
Nitro_Junkie
Member

Откуда:
Сообщений: 1038
invm
Nitro_Junkie
Что за таблица текущего наличия?
Таблица, где хранятся текущие остатки.

Так мне нужны остатки на дату. А дата может быть и год назад. Чем мне текущие остатки то помогут?
14 авг 19, 17:01    [21949461]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оптимизацией IS NOT NULL  [new]
4d_monster
Member

Откуда: Москва
Сообщений: 1523
Nitro_Junkie
invm
пропущено...
Таблица, где хранятся текущие остатки.

Так мне нужны остатки на дату. А дата может быть и год назад. Чем мне текущие остатки то помогут?

Откройте для себя Регистр, а не изобретайте велосипед на треугольных колёсах.
14 авг 19, 17:06    [21949469]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оптимизацией IS NOT NULL  [new]
Nitro_Junkie
Member

Откуда:
Сообщений: 1038
4d_monster
Nitro_Junkie
пропущено...

Так мне нужны остатки на дату. А дата может быть и год назад. Чем мне текущие остатки то помогут?

Откройте для себя Регистр, а не изобретайте велосипед на треугольных колёсах.


Это в Oracle или в MS SQL как называется? И даже если бы он был, чем мне он в этом запросе поможет? Ну не будет UNION ALL, но проблема то останется.
14 авг 19, 17:14    [21949478]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3]      все
Все форумы / Microsoft SQL Server Ответить