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

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

code| eventindex| eventdate | type | difftime
------------------------------------------------------------
1 | 65001 | 2012-11-24 01:41:55 | город |
1 | 65001 | 2012-11-24 02:47:15 | город | ?????
------------------------------------------------------------
1 | 69000 | 2012-11-25 01:43:55 | смт |
1 | 69000 | 2012-11-25 05:22:33 | смт |
1 | 69000 | 2012-11-25 06:11:01 | смт | ?????
------------------------------------------------------------
1 | 22111 | 2012-11-27 03:59:05 | село |
1 | 22111 | 2012-11-27 05:21:12 | село |
1 | 22111 | 2012-11-27 07:42:57 | село | ?????
------------------------------------------------------------
описание: таблица показывает маршрут человека со своим code, который едет из города в село.Попадая в каждый насел.пункт генерируется событие со свои eventindex и время.

Вопрос: Как написать запрос для этой таблицы,чтоб от максимальной даты, в конкретном eventindex и type отнималась минимальная дата?(должно быть три результата)
29 ноя 12, 19:45    [13552350]     Ответить | Цитировать Сообщить модератору
 Re: как отнять предыдущую запись от следующей?  [new]
Alexandr Kr.
Member

Откуда: Украина, Харьков
Сообщений: 165
Евгений Максименко,

Как - то так пробуйте

with cte1 as (
select eventindex,type,eventdate
Row_Number() over(partition by eventindex,type order by evendate) as FirstTimeNum
from Table
),
cte2 as 
(
select code,eventindex,eventdate,type,difftime,
Row_Number() over(partition by eventindex,type order by evendate desc) as LastTimeNum
from Table
)
select code,eventindex,eventdate,type, case when LastTimeNum=1 then datediff(dd,b.eventdate,a.eventdate) end difftime
from cte2 a left join cte1 b on a.eventindex=b.eventindex and a.type=b.type and b.FirstTimeNum=1
29 ноя 12, 19:55    [13552379]     Ответить | Цитировать Сообщить модератору
 Re: как отнять предыдущую запись от следующей?  [new]
Добрый Э - Эх
Guest
Евгений Максименко,

если сервер 2012, то смотреть в сторону оконных функций LEAD | LAG
29 ноя 12, 20:07    [13552425]     Ответить | Цитировать Сообщить модератору
 Re: как отнять предыдущую запись от следующей?  [new]
Евгений Максименко
Member

Откуда:
Сообщений: 15
Alexandr Kr., спасибо.Все вышло.
30 ноя 12, 13:23    [13555494]     Ответить | Цитировать Сообщить модератору
 Re: как отнять предыдущую запись от следующей?  [new]
Евгений Максименко
Member

Откуда:
Сообщений: 15
Теперь такая же ситуация реализовать в БД Informix.
Насколько я понял здесь уже этот подход не подойдет, так как в этой БД нет over.
Здесь есть спецы по Informix? или нужно писать в другом разделе?
30 ноя 12, 13:25    [13555507]     Ответить | Цитировать Сообщить модератору
 Re: как отнять предыдущую запись от следующей?  [new]
так зашёл
Guest
Евгений Максименко
Теперь такая же ситуация реализовать в БД Informix.
Насколько я понял здесь уже этот подход не подойдет, так как в этой БД нет over.
Здесь есть спецы по Informix? или нужно писать в другом разделе?


не надо никаких СТЕ, ранговых, это всё очень плохо в данной задаче... Тут всё просто стандартом SQL-92

SELECT 
  code, 
  eventindex, 
  MAX(eventdate) AS eventdate, 
  type, 
  MAX(eventdate)-MIN(eventdate) AS difftime
FROM _Table
GROUP BY code, eventindex, type
30 ноя 12, 13:37    [13555644]     Ответить | Цитировать Сообщить модератору
 Re: как отнять предыдущую запись от следующей?  [new]
так зашёл
Guest
Евгений Максименко,

Единственное что надо посмотреть, как и в каком виде считать разницу дат/времён
Ну это я думаю не проблема.
30 ноя 12, 13:39    [13555658]     Ответить | Цитировать Сообщить модератору
 Re: как отнять предыдущую запись от следующей?  [new]
так зашёл
Guest
Alexandr Kr.,

Испорчен народ ранговыми функциями:(
30 ноя 12, 13:40    [13555670]     Ответить | Цитировать Сообщить модератору
 Re: как отнять предыдущую запись от следующей?  [new]
Евгений Максименко
Member

Откуда:
Сообщений: 15
так зашёл,теперь все вышло.
Действительно,нужно просто в группировку включить нужные поля и задать сортировку. Спасибо.

А вот если мне нужно получить разницу между следующей датой и предыдущей, а не макс. и минимальной, то-есть, если у нас имеется 3 и более записей с одним eventindex-ом ?
30 ноя 12, 16:03    [13556985]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить