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

Откуда:
Сообщений: 257
Всех привествую, подскажите пожалуйста, разобраться с запросом.

Есть таблица

create table #Result(DateD date,Id int)

insert into #Result
values
('2014-11-19', 395),
('2014-12-02', 395),
('2014-12-03', 395),
('2014-12-11', 395),
('2014-12-17', 395)

select * from #Result

Идут даты
2014-11-19
2014-12-02
2014-12-03
2014-12-11
2014-12-17

Как мне найти подряд идущие даты, в данном примере их 2, можно ли в данном резалсете выести отдельно, что для данного Id было две подряд идущие даты


select row_number() over(partition by Id order by DateD) rn,*,
lag(DateD,1,1) over(order by year(DateD)) as sss
from #Result

Но как я понял с датами Lag и lead не работают, подскажите, как мне вывести подряд идущие даты

Заранее спасибо
19 дек 14, 11:42    [17021826]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
o-o
Guest
user87,

работают lead и lag с датами, вы неправильно ошибку интерпретировали (ошибки надо обнародовать)
у вас дефолтом задано целое значение 1, вот он и фигеет: вы даты или целые упорядочиваете.
задайте туда дату:
lag(DateD,1,'19000101')

и почему не упорядочивать по дате, задав год, к-ый вообще у всех дат один,
вы что надеялись получить?
lag(DateD,1,'19000101') over(order by DateD)
19 дек 14, 12:12    [17022119]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
user87
Member

Откуда:
Сообщений: 257
С ошибкой разобрался, не могу понять, как написать именно подряд идущие даты, если такие есть вывести
19 дек 14, 12:30    [17022277]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
user87
Member

Откуда:
Сообщений: 257
Вопрос снимаю, спасибо большое
19 дек 14, 12:40    [17022359]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
o-o
Guest
user87
как написать именно подряд идущие даты, если такие есть вывести

блин, у меня проблемы с 2012, он подпольный и не на этом компе.
надо просто вывести только подряд идущие даты
или сбоку от каждой даты выдать предыдущую + флагом, если даты подряд?
для второго: посчитайте разницу в днях между соседями, если 1, то оно.
навроде:
case datediff(day, lag(DateD,1,'19000101') over(order by DateD), DateD) 
when 1 then 'consecutive' end as flag
19 дек 14, 12:41    [17022366]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
SELECT Id,DateD FROM
(
 SELECT Id,DateD,[LAG]=LAG(DateD)OVER(PARTITION BY Id ORDER BY DateD),[LEAD]=LEAD(DateD)OVER(PARTITION BY Id ORDER BY DateD)
 FROM #Result
)T
WHERE [LAG]=DATEADD(DAY,-1,DateD) OR [LEAD]=DATEADD(DAY,1,DateD);
19 дек 14, 12:49    [17022419]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить