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

Откуда: Москва
Сообщений: 215
Прошу помочь в составлении скрипта. Имеется календарь дат + календарь выходных дней. Необходимо отобрать дату, которая будет через N (переменная) рабочих дней.

select convert(varchar,convert(datetime ,str(c.dateint)),103) d, convert(datetime,str(c.dateint),112)  
  from tCalendarContent as c (nolock index = XAK0tCalendarContent)  
  left outer join
       tCalendarContent as cc (nolock index = XAK0tCalendarContent)
    on cc.dateint = c.dateint
   and cc.CalendarID = 10000000005
        where c.CalendarID = 2
        and c.dateint >= 20151209--@dt_d  
        order by c.dateint
9 дек 15, 17:33    [18536821]     Ответить | Цитировать Сообщить модератору
 Re: отобрать n-ю по порядку Дату  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Azvaal, Выбираете все даты старше начальной, нумеруете (с помощью row_number) с партиционированием по типу дня (рабочий/нерабочий), выбираете рабочую дату с номером, равным значению переменной.
9 дек 15, 17:45    [18536895]     Ответить | Цитировать Сообщить модератору
 Re: отобрать n-ю по порядку Дату  [new]
Glory
Member

Откуда:
Сообщений: 104760
Azvaal
Имеется календарь дат + календарь выходных дней.

Это две таблицы или все же одна, как показано в вашем запросе ?
9 дек 15, 17:50    [18536932]     Ответить | Цитировать Сообщить модератору
 Re: отобрать n-ю по порядку Дату  [new]
o-o
Guest
уже давно (from 2012 onwards) есть offset..fetch.
осталось исключить выходные.
у меня нет календаря выходных, а с выключением сб и вс выглядит так;
declare @dt date = '20160303';
declare @n int = 10;
 
select *
from dbo.Calendar
where dt > @dt and dw not in ('суббота', 'воскресенье')
order by dt 
offset @n rows fetch next 1 row only;
9 дек 15, 17:59    [18536991]     Ответить | Цитировать Сообщить модератору
 Re: отобрать n-ю по порядку Дату  [new]
aleks2
Guest
o-o
уже давно (from 2012 onwards) есть offset..fetch.
осталось исключить выходные.
у меня нет календаря выходных, а с выключением сб и вс выглядит так;
declare @dt date = '20160303';
declare @n int = 10;
 
select *
from dbo.Calendar
where dt > @dt and dw not in ('суббота', 'воскресенье')
order by dt 
offset @n rows fetch next 1 row only;


Дык оно никчему.
declare @dt date = '20160303';
declare @n int = 10;

select top(1) * from 
	(select top(@n) *
	   from dbo.Calendar
	   where dt > @dt and dw not in ('суббота', 'воскресенье')
	   order by dt 
	 ) x
order by dt desc; 
9 дек 15, 20:03    [18537521]     Ответить | Цитировать Сообщить модератору
 Re: отобрать n-ю по порядку Дату  [new]
o-o
Guest
aleks2,

Ну и пивоты через case переписываются.
В MS свои претензии направьте, чтоб никчемность не вводили
9 дек 15, 20:16    [18537566]     Ответить | Цитировать Сообщить модератору
 Re: отобрать n-ю по порядку Дату  [new]
bacalavr
Member

Откуда:
Сообщений: 311
воу воу
диософт палехче
select max(dateint) from (
select top(5) cc1.* from tCalendarContent cc1
left join tCalendarContent cc2 on cc2.CalendarID = 2 and cc2.DateInt = cc1.DateInt
where cc1.CalendarID = 1 and cc2.DateInt is null
and cc1.DateInt > 20150529
order by cc1.DateInt desc
) cc
9 дек 15, 21:22    [18537722]     Ответить | Цитировать Сообщить модератору
 Re: отобрать n-ю по порядку Дату  [new]
aleks2
Guest
o-o
aleks2,

Ну и пивоты через case переписываются.
В MS свои претензии направьте, чтоб никчемность не вводили

Претензии не майкрософту - претензии чукчам, навроде тя.
10 дек 15, 11:43    [18539447]     Ответить | Цитировать Сообщить модератору
 Re: отобрать n-ю по порядку Дату  [new]
o-o
Guest
aleks2
o-o
aleks2,

Ну и пивоты через case переписываются.
В MS свои претензии направьте, чтоб никчемность не вводили

Претензии не майкрософту - претензии чукчам, навроде тя.

от чукчи и слышу.
у меня стандартный вариант в отличие от некоторых.
но вложенностью и кол-вом букв твое решение превосходит, ага
10 дек 15, 12:01    [18539582]     Ответить | Цитировать Сообщить модератору
 Re: отобрать n-ю по порядку Дату  [new]
o-o
Guest
кстати, у нас ответы расходятся.
как раз для 2016-03-03.
это четверг.
если задать 1 день, т.е. вопрос: что будет через 1 рабочий день,
мое решение выдаст пн, 2016-03-07
алексово пт, 2016-03-04.
я все же считаю, что через 1 день это не на след. день.
иначе работающие через день работали бы каждый день.
поэтому через день все же суббота, а ее надо исключить
-----
теперь про пивоты и переписывание одно через другое.
наши запросы еще и оптимизируются по-разному.
т.е. этот offset..fetch не раскрывается в 2 топа как пивот в кейсы.
в результате в плане алекса лишний сорт

К сообщению приложен файл. Размер - 30Kb
10 дек 15, 17:28    [18541932]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить