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

Откуда:
Сообщений: 6
Всем доброе утро! Продолжаю серию задачек, в которых сам не смог разобраться.
Надеюсь на помощь!


Дана таблица product_shop с полями prod_id, shop_id, date_s
Надо найти те магазины, в которых есть перерыв между продажами больше 30 дней.
Я написал следующий запрос:
Select distinct a.shop_id
From PRODUCT_SHOP As a join PRODUCT_SHOP As b On a.prod_id=b.prod_id
Where DATEDIFF(day, a.date_s, b.date_s)>30
Но он выводит магазины в которых вообще есть разница между двумя проданными товарами 30 дней.
Как сделать так, что бы он вывел только те, в которых есть именно перерыв между двумя покупками?

Заранее спасибо!
9 июл 14, 12:14    [16280285]     Ответить | Цитировать Сообщить модератору
 Re: Поиск последовательных записей с разницей в n дней.  [new]
Glory
Member

Откуда:
Сообщений: 104760
DimDim197
Как сделать так, что бы он вывел только те, в которых есть именно перерыв между двумя покупками?

Ну так для каждой записи нужно искать следующую по возрастанию/убыванию даты продажи запись
9 июл 14, 12:25    [16280352]     Ответить | Цитировать Сообщить модератору
 Re: Поиск последовательных записей с разницей в n дней.  [new]
DimDim197
Member

Откуда:
Сообщений: 6
Glory,
А хотя бы в двух словах - как это сделать?)
9 июл 14, 12:55    [16280531]     Ответить | Цитировать Сообщить модератору
 Re: Поиск последовательных записей с разницей в n дней.  [new]
_djХомяГ
Guest
В двух словах один из способов
declare @t table (d datetime)
insert into @t 
select '1 may 2014'
union all
select '2 may 2014'
union all
select '5 may 2014'
union all
select '6 jun 2014'


select d,(select top 1 d from @t t1 where t1.d>t.d order by d)
from @t t 
-----PS Разницу между датами найти наверное сумеете 
9 июл 14, 13:02    [16280567]     Ответить | Цитировать Сообщить модератору
 Re: Поиск последовательных записей с разницей в n дней.  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Под SQL 2012

SELECT DISTINCT shop_id FROM 
(
	Select shop_id, 
		Prev_date_s = LAG(date_s, 1, NULL) OVER (PARTITION BY  prod_id ORDER BY date_s),
		date_s
	From PRODUCT_SHOP 
) A
Where DATEDIFF(day, date_s, Prev_date_s)>30
9 июл 14, 13:08    [16280609]     Ответить | Цитировать Сообщить модератору
 Re: Поиск последовательных записей с разницей в n дней.  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
a_voronin,
Коррекция

SELECT DISTINCT shop_id FROM 
(
	Select shop_id, 
		Prev_date_s = LAG(date_s, 1, NULL) OVER (PARTITION BY shop_id ORDER BY date_s),
		date_s
	From PRODUCT_SHOP 
) A
Where DATEDIFF(day, date_s, Prev_date_s)>30
9 июл 14, 13:10    [16280619]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить