Как рассчитать разницу между текущей и предыдущей датой в разных строках - PullRequest
0 голосов
/ 18 мая 2018

Привет. Я хочу вычислить разницу между датами в разных строках с помощью sql teradata assistant

Моя таблица выглядит следующим образом

create table test (
    id INT,
    Dx varchar(10)
    Dx_date date);

    insert into TEST values(1,'E14','2015-05-03');
insert into TEST values(1,'E15','2013-05-06');
insert into TEST values(1,'E15','2016-03-03');
insert into TEST values(2,'E15','2012-03-04');
insert into TEST values (3,'E144','2011-03-04');
insert into TEST values  (3,'E122','2011-02-04');

Чем рассчитать разницу дат между каждой строкой IЯ использую этот код

select id,
            dx, 
            Date_dx, 
            zeroifnull (MDIFF(Date_dx,1,id,dx)
            from TEST
            group by id;

Но он дает мне неверные результаты

Спасибо за помощь

Ответы [ 3 ]

0 голосов
/ 18 мая 2018

Функция окна должна упростить эту задачу.

Для разницы дат в дней :

  Select *
 ,DateDiff(DD, Dx_date, Lag(Dx_Date) Over (Order By Dx_date)) DateDiff
 From test

Хотя вы не указали,Ваша попытка вычислить дату предполагает, что многие из вас заинтересованы в вычислении дат для каждого идентификатора, поэтому

Select  *
        ,DateDiff(DD, Dx_date, Lag(Dx_Date) Over (Partition by id Order By Dx_date)) DateDiff
From test

Примечание: вам может потребоваться отредактировать функцию даты соответствующим образом.

0 голосов
/ 21 мая 2018

Я нашел решение

select id ,dx,Dx_date,
       zeroifnull(dx_date-min(dx_date) over (partition by id order by dx_date rows 
       between 1 preceding and 1 preceding )) as difference _dx_date
from TEST;

Спасибо

0 голосов
/ 18 мая 2018

Попробуйте это:

 select id, dx, datediff(day, lastdate, date_dx) datedifference from (
    select id,
                dx, 
                Date_dx, 
                lag(Date_dx,1,null) over(order by id)lastdate
                from TEST)A
...