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

Откуда:
Сообщений: 3
Здравствуйте, целый день уже бьюсь с, казалось бы, простой на первый взгляд задачей: Нужно получить последние и предпоследние (по дате) значения из таблицы для каждой сущности (для всех значений поля Name следующей таблицы).

Исходные данные:
CREATE TABLE [dbo].[Table_1](
	[Id] [int] NOT NULL,
	[Name] [nvarchar](50) NOT NULL,
	[Dt] [datetime] NOT NULL,
	[Attr1] [int] NOT NULL,
	[Attr2] [int] NOT NULL
) ON [PRIMARY]
GO

INSERT INTO Table_1 VALUES
(1, 'Name3', '2013-07-21 19:06:43.103', 30, 30),
(2, 'Name1', '2013-07-22 09:57:48.580', 32, 33),
(3, 'Name2', '2013-07-22 09:57:48.580', 31, 32),
(4, 'Name3', '2013-07-22 09:57:48.580', 34, 35),
(5, 'Name1', '2013-07-23 11:27:33.007', 29, 30),
(6, 'Name2', '2013-07-23 11:27:33.007', 30, 31),
(7, 'Name3', '2013-07-23 11:27:33.007', 31, 32)


Желаемый результат:
Name | Dt | Attr1 | Attr2 | Dt_before | Attr1_before | Attr2_before |
Name1 | 2013-07-23 11:27:33.007 | 29 | 30 | 2013-07-22 09:57:48.580 | 32 | 33 |
Name2 | 2013-07-23 11:27:33.007 | 30 | 31 | 2013-07-22 09:57:48.580 | 31 | 32 |
Name3 | 2013-07-23 11:27:33.007 | 31 | 32 | 2013-07-22 09:57:48.580 | 34 | 35 |


В интернете имеются решения, когда сами сущности и значения к ним располагаются в различных таблицах и потом join'ятся. А вот в таком варианте подобных задач я не нашёл. Ну и, естественно, хочется решить её по возможности рационально.
Если задача окажется чересчур сложной, то, в принципе, можно значения поля Name вынести в отдельную таблицу, но хотелось бы решить её в исходном виде. Заранее спасибо.
23 июл 13, 22:17    [14606977]     Ответить | Цитировать Сообщить модератору
 Re: Нетривиальный запрос для вывода двух последних дат для каждой сущности  [new]
kazuo
Member

Откуда:
Сообщений: 3
Забыл написать свою версию MS SQL Server:
Microsoft SQL Server 2012 - 11.0.2100.60 (X64) Feb 10 2012 19:39:15 Copyright (c) Microsoft Corporation Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
23 июл 13, 22:22    [14606999]     Ответить | Цитировать Сообщить модератору
 Re: Нетривиальный запрос для вывода двух последних дат для каждой сущности  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
with x as
(
select
 Name, Dt, Attr1, Attr2,
 row_number() over (partition by Name order by dt desc) as rn,
 lag(Dt) over (partition by Name order by dt) as Dt_before,
 lag(Attr1) over (partition by Name order by dt) as Attr1_before,
 lag(Attr2) over (partition by Name order by dt) as Attr2_before
from
 dbo.Table_1
)
select * from x where rn = 1;
23 июл 13, 23:20    [14607292]     Ответить | Цитировать Сообщить модератору
 Re: Нетривиальный запрос для вывода двух последних дат для каждой сущности  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
invm, что-то тут не так...
+ lag(...) over (partition by Name order by dt,attr1,attr2)
IdNameDtAttr1Attr2
2Name12013-07-23 11:27:33.0073031
5Name12013-07-23 11:27:33.0072930
4Name12013-07-22 09:57:48.5803435
3Name12013-07-22 09:57:48.5803132
1Name12013-07-21 19:06:43.1033030
WITH Table_1 AS(SELECT * FROM (VALUES 
   (1, 'Name1', convert(datetime,'2013-07-21 19:06:43.103'), 30, 30),
   (2, 'Name1', '2013-07-23 11:27:33.007', 30, 31),
   (3, 'Name1', '2013-07-22 09:57:48.580', 31, 32),
   (4, 'Name1', '2013-07-22 09:57:48.580', 34, 35),
   (5, 'Name1', '2013-07-23 11:27:33.007', 29, 30)
   ) v_Table_1 (Id, Name, Dt, Attr1, Attr2)),
x as
(
select
 Name, Dt, Attr1, Attr2,
 row_number() over (partition by Name order by dt desc) as rn,
 lag(Dt) over (partition by Name order by dt) as Dt_before,
 lag(Attr1) over (partition by Name order by dt) as Attr1_before,
 lag(Attr2) over (partition by Name order by dt) as Attr2_before
from
 Table_1
)
select * from x where rn = 1;
NameDtAttr1Attr2rnDt_beforeAttr1_beforeAttr2_before
Name12013-07-23 11:27:33.007303112013-07-22 09:57:48.5803132
select 
   Name,
   min(case when rn=1 then Dt end) Dt_max,
   min(case when rn=1 then Attr1 end)Attr1x,
   min(case when rn=1 then Attr2 end)Attr2x,
   min(case when rn=2 then Dt end) Dt_min,
   min(case when rn=2 then Attr1 end)Attr1n,
   min(case when rn=2 then Attr2 end)Attr2n
from (
   select *, row_number()over(partition by name order by dt desc)rn
   from Table_1
   ) t
where rn<3
group by Name
24 июл 13, 01:06    [14607720]     Ответить | Цитировать Сообщить модератору
 Re: Нетривиальный запрос для вывода двух последних дат для каждой сущности  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
with x as
(
select
 Name, Dt, Attr1, Attr2,
 row_number() over (partition by Name order by dt desc) as rn,
 lead(Dt) over (partition by Name order by dt desc) as Dt_before,
 lead(Attr1) over (partition by Name order by dt desc) as Attr1_before,
 lead(Attr2) over (partition by Name order by dt desc) as Attr2_before
from
 dbo.Table_1
)
select * from x where rn = 1;
Заодно на одну сортировку меньше.
24 июл 13, 11:15    [14608976]     Ответить | Цитировать Сообщить модератору
 Re: Нетривиальный запрос для вывода двух последних дат для каждой сущности  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
но ведь значительно дольше
24 июл 13, 11:27    [14609064]     Ответить | Цитировать Сообщить модератору
 Re: Нетривиальный запрос для вывода двух последних дат для каждой сущности  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3618
invm
with x as
(
select
 Name, Dt, Attr1, Attr2,
 row_number() over (partition by Name order by dt desc) as rn,
 lead(Dt) over (partition by Name order by dt desc) as Dt_before,
 lead(Attr1) over (partition by Name order by dt desc) as Attr1_before,
 lead(Attr2) over (partition by Name order by dt desc) as Attr2_before
from
 dbo.Table_1
)
select * from x where rn = 1;
Заодно на одну сортировку меньше.

только не lead а lag
24 июл 13, 11:38    [14609160]     Ответить | Цитировать Сообщить модератору
 Re: Нетривиальный запрос для вывода двух последних дат для каждой сущности  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3618
Cygapb-007
но ведь значительно дольше

это у тебя дольше. Сорт+хэш груп. А можно в один сорт
24 июл 13, 11:38    [14609164]     Ответить | Цитировать Сообщить модератору
 Re: Нетривиальный запрос для вывода двух последних дат для каждой сущности  [new]
мимо
Guest
;with a as (
select *
,row_number() over (partition by name order by dt ) p
from Table_1
)
select a.Name 
		, a.Dt 
		, a.Attr1 
		, a.Attr2 
		, a1.Dt as Dt_before
		, a1.Attr1 as Attr1_before
		, a1.Attr2 as Attr2_before
from a 
	inner join a as a1 on ( a1.Name = a.Name 
			and a1.p = a.p-1) 
where a.p = (select MAX(p) from a as a2 where a2.Name = a.Name) 

Это медленее? А то у меня 2012 нет.
24 июл 13, 12:09    [14609406]     Ответить | Цитировать Сообщить модератору
 Re: Нетривиальный запрос для вывода двух последних дат для каждой сущности  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Ivan Durak
Cygapb-007
но ведь значительно дольше

это у тебя дольше. Сорт+хэш груп. А можно в один сорт
Проверим
+ Генерация данных
/*
if object_id('tempdb..#Table_1') is not null begin 
   -- drop index #IX_Table1_Name_Dt on #Table_1
   drop table #Table_1 
end
*/
declare @MaxRowQty int=1000000
if object_id('tempdb..#Table_1') is null begin
	create table #Table_1(
	   Id int identity NOT NULL,
	   Name nvarchar(50) NOT NULL,
	   Dt datetime NOT NULL,
	   Attr1 int NOT NULL,
	   Attr2 int NOT NULL
      )
   insert #Table_1(Name,Dt,Attr1,Attr2)
   select top (@MaxRowQty) 
         Code,
         DATEADD(MILLISECOND, rnd%(24*60*60*100), now),
         Attr1,
         Attr2
      from sys.objects o1,sys.objects o2,sys.objects o3
      cross apply (select rnd=checksum(newid()), now=CONVERT(datetime,CONVERT(date,getdate()))) rnd
      cross apply (select 
         Code='Name_'+right(100+abs(rnd)%99+1,2),
         Attr1=abs(rnd)%29+10,
         Attr2=abs(rnd)%23+15
         ) val
   -- create nonclustered index #IX_Table1_Name_Dt on #Table_1(Name,Dt desc) include (Attr1,Attr2)
end
+ обработка
print @@version
set statistics time on;
set statistics io on;
print '*****************LEAD()OVER()*******************';
with x as
(
select
 Name, Dt, Attr1, Attr2,
 row_number() over (partition by Name order by dt desc) as rn,
 lead(Dt) over (partition by Name order by dt desc) as Dt_before,
 lead(Attr1) over (partition by Name order by dt desc) as Attr1_before,
 lead(Attr2) over (partition by Name order by dt desc) as Attr2_before
from
 #Table_1
)
select * from x where rn = 1;

print '*****************GROUP BY*******************'
select 
   Name,
   min(case when rn=1 then Dt end) Dt_max,
   min(case when rn=1 then Attr1 end)Attr1x,
   min(case when rn=1 then Attr2 end)Attr2x,
   min(case when rn=2 then Dt end) Dt_min,
   min(case when rn=2 then Attr1 end)Attr1n,
   min(case when rn=2 then Attr2 end)Attr2n
from (
   select *, row_number()over(partition by name order by dt desc)rn
   from #Table_1
   ) t
where rn<3
group by Name
set statistics time off;
set statistics io off;
Итоги
Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 
Dec 28 2012 20:23:12
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)


Время работы SQL Server:
Время ЦП = 0 мс, затраченное время = 0 мс.
*****************LEAD()OVER()*******************

Время работы SQL Server:
Время ЦП = 0 мс, затраченное время = 0 мс.

(строк обработано: 99)
Таблица "#Table_1____________________________________________________________________________________________________________00000000010C". Число просмотров 5, логических чтений 5814, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "Worktable". Число просмотров 0, логических чтений 0, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.

Время работы SQL Server:
Время ЦП = 14608 мс, затраченное время = 6000 мс.
*****************GROUP BY*******************

Время работы SQL Server:
Время ЦП = 0 мс, затраченное время = 0 мс.

(строк обработано: 99)
Таблица "#Table_1____________________________________________________________________________________________________________00000000010C". Число просмотров 5, логических чтений 5814, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.

Время работы SQL Server:
Время ЦП = 9564 мс, затраченное время = 4993 мс.
Внимание! Значение NULL исключено в агрегатных или других операциях SET.
+ то же, с включением индекса
Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 
Dec 28 2012 20:23:12
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)


Время работы SQL Server:
Время ЦП = 0 мс, затраченное время = 0 мс.
*****************LEAD()OVER()*******************

Время работы SQL Server:
Время ЦП = 0 мс, затраченное время = 0 мс.
Время синтаксического анализа и компиляции SQL Server:
время ЦП = 4 мс, истекшее время = 4 мс.

(строк обработано: 99)
Таблица "Worktable". Число просмотров 0, логических чтений 0, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "#Table_1____________________________________________________________________________________________________________00000000010C". Число просмотров 1, логических чтений 5990, физических чтений 0, упреждающих чтений 27, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.

Время работы SQL Server:
Время ЦП = 4078 мс, затраченное время = 4082 мс.
*****************GROUP BY*******************

Время работы SQL Server:
Время ЦП = 0 мс, затраченное время = 0 мс.
Время синтаксического анализа и компиляции SQL Server:
время ЦП = 0 мс, истекшее время = 3 мс.
Внимание! Значение NULL исключено в агрегатных или других операциях SET.

(строк обработано: 99)
Таблица "#Table_1____________________________________________________________________________________________________________00000000010C". Число просмотров 1, логических чтений 5990, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.

Время работы SQL Server:
Время ЦП = 469 мс, затраченное время = 473 мс.
24 июл 13, 12:15    [14609474]     Ответить | Цитировать Сообщить модератору
 Re: Нетривиальный запрос для вывода двух последних дат для каждой сущности  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3618
план дай
24 июл 13, 14:59    [14610970]     Ответить | Цитировать Сообщить модератору
 Re: Нетривиальный запрос для вывода двух последних дат для каждой сущности  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Ivan Durak
план дай


К сообщению приложен файл (планы.rar - 11Kb) cкачать
24 июл 13, 15:25    [14611202]     Ответить | Цитировать Сообщить модератору
 Re: Нетривиальный запрос для вывода двух последних дат для каждой сущности  [new]
kazuo
Member

Откуда:
Сообщений: 3
Всем большое спасибо за помощь! Воспользовался запросом Cygapb-007 с небольшой модификацией под свои нужды.
24 июл 13, 19:47    [14613099]     Ответить | Цитировать Сообщить модератору
 Re: Нетривиальный запрос для вывода двух последних дат для каждой сущности  [new]
eterthertherth
Guest
Вариации на тему :)

;with t1 as
(
	select *
	from
	(
		values
		(1, 'Name3', cast('20130721 19:06:43.103' as datetime), 30, 30),
		(2, 'Name1', cast('20130722 09:57:48.580' as datetime), 32, 33),
		(3, 'Name2', cast('20130722 09:57:48.580' as datetime), 31, 32),
		(4, 'Name3', cast('20130722 09:57:48.580' as datetime), 34, 35),
		(5, 'Name1', cast('20130723 11:27:33.007' as datetime), 29, 30),
		(6, 'Name2', cast('20130723 11:27:33.007' as datetime), 30, 31),
		(7, 'Name3', cast('20130723 11:27:33.007' as datetime), 31, 32)
	) d(id, [name], dt, attr1, attr2)
)
select
	[name],
	cast(substring(p.[1], 21, 23) as datetime) as dt,
	cast(substring(p.[1], 1, 10) as int) as attr1,
	cast(substring(p.[1], 11, 10) as int) as attr2,
	cast(substring(p.[2], 21, 23) as datetime) as before_dt,
	cast(substring(p.[2], 1, 10) as int) as before_attr1,
	cast(substring(p.[2], 11, 10) as int) as before_attr2
from
(
	select
		[name],
		str(attr1, 10) + str(attr2, 10)+ convert(varchar, dt, 126) collate latin1_general_bin2 as val,
		row_number() over(partition by [name] order by dt desc) as rn
	from #Table_1
) as t2
pivot (min(val) for rn in ([1], [2])) as p


+ без индекса

Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
Feb 10 2012 19:39:15
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )


Время работы SQL Server:
Время ЦП = 0 мс, затраченное время = 0 мс.
*****************LEAD()OVER()*******************

Время работы SQL Server:
Время ЦП = 0 мс, затраченное время = 0 мс.

(99 row(s) affected)
Таблица "#Table_1____________________________________________________________________________________________________________00000000000D". Число просмотров 3, логических чтений 3698, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "Worktable". Число просмотров 0, логических чтений 0, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.

(1 row(s) affected)

Время работы SQL Server:
Время ЦП = 8766 мс, затраченное время = 5454 мс.
*****************GROUP BY*******************

Время работы SQL Server:
Время ЦП = 0 мс, затраченное время = 0 мс.

(99 row(s) affected)
Таблица "#Table_1____________________________________________________________________________________________________________00000000000D". Число просмотров 3, логических чтений 3698, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Внимание! Значение NULL исключено в агрегатных или других операциях SET.

(1 row(s) affected)

Время работы SQL Server:
Время ЦП = 5007 мс, затраченное время = 4744 мс.
*****************PIVOT*******************

Время работы SQL Server:
Время ЦП = 0 мс, затраченное время = 0 мс.

(99 row(s) affected)
Таблица "#Table_1____________________________________________________________________________________________________________00000000000D". Число просмотров 3, логических чтений 3698, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.

(1 row(s) affected)

Время работы SQL Server:
Время ЦП = 5226 мс, затраченное время = 4278 мс.


+ с индексом

Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
Feb 10 2012 19:39:15
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )


Время работы SQL Server:
Время ЦП = 0 мс, затраченное время = 0 мс.
*****************LEAD()OVER()*******************

Время работы SQL Server:
Время ЦП = 0 мс, затраченное время = 0 мс.

(99 row(s) affected)
Таблица "Worktable". Число просмотров 0, логических чтений 0, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "#Table_1____________________________________________________________________________________________________________00000000000D". Число просмотров 1, логических чтений 3811, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.

(1 row(s) affected)

Время работы SQL Server:
Время ЦП = 4369 мс, затраченное время = 4485 мс.
*****************GROUP BY*******************

Время работы SQL Server:
Время ЦП = 0 мс, затраченное время = 0 мс.
Внимание! Значение NULL исключено в агрегатных или других операциях SET.

(99 row(s) affected)
Таблица "#Table_1____________________________________________________________________________________________________________00000000000D". Число просмотров 1, логических чтений 3811, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.

(1 row(s) affected)

Время работы SQL Server:
Время ЦП = 561 мс, затраченное время = 602 мс.
*****************PIVOT*******************

Время работы SQL Server:
Время ЦП = 0 мс, затраченное время = 0 мс.

(99 row(s) affected)
Таблица "#Table_1____________________________________________________________________________________________________________00000000000D". Число просмотров 1, логических чтений 3811, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.

(1 row(s) affected)

Время работы SQL Server:
Время ЦП = 827 мс, затраченное время = 836 мс.

24 июл 13, 21:09    [14613365]     Ответить | Цитировать Сообщить модератору
 Re: Нетривиальный запрос для вывода двух последних дат для каждой сущности  [new]
gqrgqwegqweg
Guest
В таком виде работает быстрее, чем group by и lead/lag

select
	[name],
	cast(substring(p.[1], 21, 23) as datetime) as dt,
	cast(substring(p.[1], 1, 10) as int) as attr1,
	cast(substring(p.[1], 11, 10) as int) as attr2,
	cast(substring(p.[2], 21, 23) as datetime) as before_dt,
	cast(substring(p.[2], 1, 10) as int) as before_attr1,
	cast(substring(p.[2], 11, 10) as int) as before_attr2
from
(
	select [name], rn, str(attr1, 10) + str(attr2, 10)+ convert(varchar, dt, 126) collate latin1_general_bin2 as val
	from
	(
		select
			*,
			row_number() over(partition by [name] order by dt desc) as rn
		from #Table_1
	) tt2
	where rn <= 2
) as t2
pivot (min(val) for rn in ([1], [2])) as p


+ сравниловка

Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
Feb 10 2012 19:39:15
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )


Время работы SQL Server:
Время ЦП = 0 мс, затраченное время = 0 мс.
*****************LEAD()OVER()*******************

Время работы SQL Server:
Время ЦП = 0 мс, затраченное время = 0 мс.

(99 row(s) affected)
Таблица "Worktable". Число просмотров 0, логических чтений 0, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "#Table_1____________________________________________________________________________________________________________00000000000D". Число просмотров 1, логических чтений 3811, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.

(1 row(s) affected)

Время работы SQL Server:
Время ЦП = 4430 мс, затраченное время = 4520 мс.
*****************GROUP BY*******************

Время работы SQL Server:
Время ЦП = 0 мс, затраченное время = 0 мс.
Внимание! Значение NULL исключено в агрегатных или других операциях SET.

(99 row(s) affected)
Таблица "#Table_1____________________________________________________________________________________________________________00000000000D". Число просмотров 1, логических чтений 3811, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.

(1 row(s) affected)

Время работы SQL Server:
Время ЦП = 515 мс, затраченное время = 613 мс.
*****************PIVOT*******************

Время работы SQL Server:
Время ЦП = 0 мс, затраченное время = 0 мс.

(99 row(s) affected)
Таблица "#Table_1____________________________________________________________________________________________________________00000000000D". Число просмотров 1, логических чтений 3811, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.

(1 row(s) affected)

Время работы SQL Server:
Время ЦП = 546 мс, затраченное время = 572 мс.

(99 row(s) affected)

(1 row(s) affected)

24 июл 13, 21:47    [14613467]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить