【问题标题】:How to calculate difference between current date and previous date in different rows如何计算不同行中当前日期和上一个日期之间的差异
【发布时间】:2018-10-29 08:03:57
【问题描述】:

您好,我想使用 sql teradata 助手计算不同行中日期之间的差异

我的桌子是这样的

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');

而不是计算我使用此代码的每一行之间的日期差异

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

但它给了我错误的结果

感谢您的帮助

【问题讨论】:

    标签: sql date teradata-sql-assistant


    【解决方案1】:

    窗口函数应该让这变得简单。

    的日期差异:

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

    虽然您没有指定,但您尝试计算日期表明您对计算每个 id 的日期感兴趣,所以;

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

    注意:您可能需要根据需要编辑日期函数。

    【讨论】:

    • 代码不起作用我收到一条错误消息“数据类型“Dx_date”与定义的类型名称不匹配”
    • 请参考我的回答中的“注意”
    【解决方案2】:

    试试这个:

     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
    

    【讨论】:

    • 代码也不起作用我认为Teradata Sql中不存在datediff和lag函数-
    【解决方案3】:

    我找到了解决办法

    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;
    

    谢谢

    【讨论】:

      猜你喜欢
      • 2016-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-20
      • 2019-04-24
      • 1970-01-01
      • 2019-09-25
      相关资源
      最近更新 更多