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

Откуда: Железнодорожный
Сообщений: 1842
Блог
Всем доброго настроения.

+ скрипт для подготовки данных

use [tempdb]
GO

create table Backups(
BackupName nvarchar(32) not null,
BackupTime datetime not null,
Primary Key (BackupName)
)
GO

declare
@i int,
@sqlrun nvarchar(1024),
@dt datetime
set @i = 1
set @dt = dateadd(d,-180,getdate())
while @i <=180
begin
set @sqlrun = 'insert into Backups(BackupName,BackupTime) values(''Backup_'+cast(@i as nvarchar)+''','''+cast(@dt as nvarchar)+''')'
exec sp_executesql @sqlrun
set @dt = dateadd(d,1,@dt)
set @i=@i+1
end
GO


Подскажите, можно ли написать такой запрос без подзапроса?

select row_number() over (partition by WeekNumb order by BackupTime) as BackupNum,t.*
from
(select	
	dense_rank() over(partition by datepart(dw,BackupTime) order by BackupTime) WeekNumb, 		
	BackupName, BackupTime  from Backups
) t

Необходимо вывести имена бекапов с в разрезе недели и пронумеровать их в каждой секции.

Сдам в ремонт свою крышу, чтоб больше не ехала, как у Чехова.
23 сен 11, 12:01    [11324705]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли оптимизировать запрос  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
"Без подзапроса"? Это вы длину запроса оптимизируете, что ли?
23 сен 11, 12:04    [11324736]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли оптимизировать запрос  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
Гавриленко Сергей Алексеевич
"Без подзапроса"? Это вы длину запроса оптимизируете, что ли?

:). Да нет. Просто хотел написать одним запросом и сравнить планы. Ну типа как будет легче серверу.
23 сен 11, 12:08    [11324775]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли оптимизировать запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
Так ?
select row_number() over(partition by datepart(wk,BackupTime) order by BackupTime) BackupNum,  		
	BackupName, BackupTime  from Backups
23 сен 11, 12:12    [11324809]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли оптимизировать запрос  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
Glory
Так ?
select row_number() over(partition by datepart(wk,BackupTime) order by BackupTime) BackupNum,  		
	BackupName, BackupTime  from Backups

Да, спасибо, нумерация правильная, приму к сведению. Но, к сожалению номер недели мне тоже надо выводить, и номер недели что бы определять последний бекап недели.
23 сен 11, 12:23    [11324899]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли оптимизировать запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
gds
Но, к сожалению номер недели мне тоже надо выводить, и номер недели что бы определять последний бекап недели.

И что мешает добавить номер недели в вывод ?
23 сен 11, 12:25    [11324913]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли оптимизировать запрос  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
Glory
gds
Но, к сожалению номер недели мне тоже надо выводить, и номер недели что бы определять последний бекап недели.

И что мешает добавить номер недели в вывод ?

Понял, как это я сразу не догадался. По плану этот запрос явно выигрывает.
select row_number() over(partition by datepart(wk,BackupTime) order by BackupTime) BackupNum,  		
	datepart(wk,BackupTime) as WeekNum,
	BackupName, BackupTime  
from Backups

Спасибо еще раз.

p.s. вопрос решен, тему можно закрывать.
23 сен 11, 12:37    [11325036]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить