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

Откуда:
Сообщений: 33
Коллеги, добрый вечер.
Не могу додуматься, подсобите пожалуйста.
Есть таблица с периодами (к примеру):
start finish
12
46
612
1722
2530

Представьте, что это числа месяца.
Необходимо создать таблицу вида:
start finish
14
46
617
1725

--Каждый период в Таблице 2 начинается того же числа, когда начинается период в Таблице 1, но заканчивается тогда, когда начинается следующий период в Таблице 1 (Кроме первого и последнего периода, так как для них другой механизм, его опустим)

Буду благодарен за любые советы.
20 мар 13, 19:44    [14074075]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование таблицы с датами  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
http://msdn.microsoft.com/en-us/library/hh213125.aspx
20 мар 13, 19:52    [14074106]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование таблицы с датами  [new]
ArghBuzz
Member

Откуда:
Сообщений: 33
Паганель
http://msdn.microsoft.com/en-us/library/hh213125.aspx

Спасибо) Мою проблему это решило бы, но

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
Apr 2 2010 15:48:46
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: ) (Hypervisor)

Есть идеи, как это можно реализовать на 2008r2?
20 мар 13, 20:08    [14074172]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование таблицы с датами  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
with cte as
(
 select
  t.start,
  row_number() over (order by t.start) as n
 from
  (
   values
    (1, 2),
    (4, 6),
    (6, 12),
    (17, 22),
    (25, 30)
  )t(start, finish)
)
select
 t1.start, t2.start as finish
from
 cte t1 join
 cte t2 on t2.n = t1.n + 1;
20 мар 13, 20:37    [14074259]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование таблицы с датами  [new]
ArghBuzz
Member

Откуда:
Сообщений: 33
invm
with cte as
(
 select
  t.start,
  row_number() over (order by t.start) as n
 from
  (
   values
    (1, 2),
    (4, 6),
    (6, 12),
    (17, 22),
    (25, 30)
  )t(start, finish)
)
select
 t1.start, t2.start as finish
from
 cte t1 join
 cte t2 on t2.n = t1.n + 1;


Большое спасибо!
20 мар 13, 20:48    [14074289]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить