Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Найти n-запись одним запросом  [new]
Леша777
Guest
DECLARE @Date TABLE ([date] datetime NULL, WorkingFalg bit NOT NULL)

DECLARE @StartDate datetime -- стартовая дата 
DECLARE @n  -- кол-во дней которые надо прибавить 


SELECT dd.[date]
FROM 
       (

           SELECT d.date 
                     ,ROW_NUMBER()  OVER(ORDER BY d.date ASC) [rn]
          FROM @Date d 
          WHERE d.date > @StartDate  AND WorkingFalg = 1
) dd
WHERE dd.[rn] = @n 
Можно как-нибудь найти такую запись одним запросом?
Версия сервера 2005
4 июн 09, 21:41    [7267584]     Ответить | Цитировать Сообщить модератору
 Re: Найти n-запись одним запросом  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
Можно как-нибудь найти такую запись одним запросом?


А у Вас их разве два?!
4 июн 09, 21:49    [7267605]     Ответить | Цитировать Сообщить модератору
 Re: Найти n-запись одним запросом  [new]
Леша777
Guest
Без подзапроса всмысле
4 июн 09, 21:54    [7267613]     Ответить | Цитировать Сообщить модератору
 Re: Найти n-запись одним запросом  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Леша777
Без подзапроса всмысле


Чем не устривает derived table, собственно?!
4 июн 09, 22:00    [7267632]     Ответить | Цитировать Сообщить модератору
 Re: Найти n-запись одним запросом  [new]
Леша777
Guest
Очень хочу ускорить. Можно как нибудь? в таблице кластерный индекс на дата + флаг
4 июн 09, 22:06    [7267651]     Ответить | Цитировать Сообщить модератору
 Re: Найти n-запись одним запросом  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Леша777
Очень хочу ускорить. Можно как нибудь? в таблице кластерный индекс на дата + флаг


План запроса можно увидеть? И, флаг то зачем в индекс включили?
4 июн 09, 22:09    [7267659]     Ответить | Цитировать Сообщить модератору
 Re: Найти n-запись одним запросом  [new]
Леша777
Guest
SELECT MAX(dd.Date)
FROM 
        (

          SELECT TOP (@n) d.date 
          FROM @Date d
          WHERE d.WorkingFlag = 1
          ORDER BY d.date ASC 
        ) dd 
Чуть лучше. А как еще можно ? просто у меня более 80 % в плане съедется на подобной конкрукции.
4 июн 09, 22:10    [7267661]     Ответить | Цитировать Сообщить модератору
 Re: Найти n-запись одним запросом  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Так можно, но боюсь планы будут одинаковы.

SELECT TOP 1 date
FROM
(SELECT TOP (@n) date
FROM @Date d
WHERE d.date > @StartDate  AND WorkingFalg = 1 ORDER BY date) Q
ORDER BY date DESC

План все-таки покажите.
4 июн 09, 22:14    [7267672]     Ответить | Цитировать Сообщить модератору
 Re: Найти n-запись одним запросом  [new]
Леша777
Guest
SELECT TOP 1 date
FROM
(SELECT TOP (@n) date
FROM @Date d
WHERE d.date > @StartDate  AND WorkingFalg = 1 ORDER BY date) Q
ORDER BY date DESC

так хуже всего из трех вариантов по времени и сost, хотя IO в в ROW_NUMBER и вашем варианте 218750 (Logical reads) против 225449 в MAX
4 июн 09, 22:20    [7267689]     Ответить | Цитировать Сообщить модератору
 Re: Найти n-запись одним запросом  [new]
Senya_L
Member

Откуда: Москва
Сообщений: 5381
Леша777
SELECT TOP 1 date
FROM
(SELECT TOP (@n) date
FROM @Date d
WHERE d.date > @StartDate  AND WorkingFalg = 1 ORDER BY date) Q
ORDER BY date DESC

так хуже всего из трех вариантов по времени и сost, хотя IO в в ROW_NUMBER и вашем варианте 218750 (Logical reads) против 225449 в MAX
Попробуйте кластерный индекс сделать на d.date.
4 июн 09, 22:25    [7267701]     Ответить | Цитировать Сообщить модератору
 Re: Найти n-запись одним запросом  [new]
AAron
Member

Откуда: Москва
Сообщений: 4324
попробуйте через курсор, открыть и зафетчить n-ю запись. чем черт не шутит. в 2000 сервере у меня такой хак оказался самым быстрым.
5 июн 09, 23:28    [7272051]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить