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

Откуда: Раменское
Сообщений: 52
Ребят, привет! Есть вопрос. Нужно возвратить данные из предыдущей строки, но с датой на 1 месяц больше.

Например:
Исходные данные:

Товар Популярность Дата
1B2013.09.01
1B2013.12.01
2A2014.01.01
2A2014.03.01


Как должно получится:
Товар Популярность Дата
1B2013.09.01
1B2013.10.01
1B2013.11.01
1B2013.12.01
2A2014.01.01
2A2014.02.01
2A2014.03.01


Может кто сталкивался с такой проблемой или может что посоветуете?
28 мар 14, 09:37    [15798852]     Ответить | Цитировать Сообщить модератору
 Re: Возврат предыдущей строки  [new]
Добрый Э - Эх
Guest
Mitresky,

все сталкивались и успешно решали такую задачу. Вот только решения сильно зависели от версии сервера, которую ты не указал.
28 мар 14, 09:43    [15798869]     Ответить | Цитировать Сообщить модератору
 Re: Возврат предыдущей строки  [new]
Mitresky
Member

Откуда: Раменское
Сообщений: 52
Добрый Э - Эх
Mitresky,

все сталкивались и успешно решали такую задачу. Вот только решения сильно зависели от версии сервера, которую ты не указал.


Прошу прощения :

SQL SERVER 2008 R2
28 мар 14, 09:45    [15798880]     Ответить | Цитировать Сообщить модератору
 Re: Возврат предыдущей строки  [new]
Добрый Э - Эх
Guest
Mitresky,

Cross join исходной таблички на двухстрочную деривед-тэйбл.
Для первой строки возвращаем исходные данные, для второй - dataeadd 1 месяц.

З.Ы.
непонятно, почему для последней строки исходных данных не сформировали доп.строку... Или опечатался и не дорисовал одну строчку в итоговом наборе данных?
28 мар 14, 09:48    [15798888]     Ответить | Цитировать Сообщить модератору
 Re: Возврат предыдущей строки  [new]
Mitresky
Member

Откуда: Раменское
Сообщений: 52
Добрый Э - Эх,

Исходные данные правильны. Просто расчет популярности у нас происходит на основании продаж, если популярность не изменилась, то изменение не отображается в истории. И мне вот нужно взять данные из предыдущего месяца по товарам, у которых популярность не изменялась.
28 мар 14, 09:59    [15798942]     Ответить | Цитировать Сообщить модератору
 Re: Возврат предыдущей строки  [new]
prog882
Guest
Mitresky,

declare @t table (id int, pp varchar(10), dt date)
insert into @t
select 1, 'B', '20130901' union all
select 1, 'B', '20131201' union all
select 2, 'A', '20140101' union all
select 2, 'A', '20140301';
with cte as (
select id, pp, min(dt) as dt, max(dt) as mx_dt from @t group by id, pp
union all
select id, pp, dateadd(mm,1,dt) as dt, mx_dt from cte
where dt < mx_dt )
select id, pp, dt from cte order by id, pp, dt
28 мар 14, 10:00    [15798944]     Ответить | Цитировать Сообщить модератору
 Re: Возврат предыдущей строки  [new]
Mitresky
Member

Откуда: Раменское
Сообщений: 52
prog882,

Благодарствую, то что нужно.
28 мар 14, 10:24    [15799041]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить