【问题标题】:DIFFERENCE IN DAYS BETWEEN VARIABLE NUMBER OF ROWS可变行数之间的天数差异
【发布时间】:2020-09-27 16:46:15
【问题描述】:

我在 Teradata 数据集中遇到这种情况:

ID                DATE1                         
134311784   14-2-2019   (first visit)           
134311784   7-3-2019    (second visit)          
134311784   22-3-2019   (third visit)           
234567891   10-2-2019   (first visit)           
234567891   17-2-2019   (second visit)          
234567891   22-2-2019   (third visit)           
234567891   18-3-2019   (fourth visit)  

我希望这样:

ID                DATE1          DIFFERENCE     
134311784   14-2-2019              0        NEW VISITOR
134311784   7-3-2019               21       --> (second -first ) = 21
134311784   22-3-2019              15       --> (third - second ) = 15
234567891   10-2-2019              0        NEW VISITOR
234567891   17-2-2019              7        
234567891   22-2-2019              5        ..
234567891   18-3-2019              24       ..

我该如何做到这一点?
我尝试使用子查询,但它没有给出想要的结果。

SELECT   t1.visit, t1.date1,T2.date1, abs( t2.date2-t1.date1) as difference
FROM data_want T1
left join data_want T2
on T1.visit=T2.visit
WHERE t2.date1 > t1.date1

【问题讨论】:

    标签: teradata-sql-assistant


    【解决方案1】:

    无需自连接,只需一个有序解析/窗口聚合函数

    SELECT   t1.ID, t1.date1,
       t1.date1 - LAG(t1.date1,1,t1.date1) OVER (PARTITION BY t1.ID ORDER BY t1.date1) difference
    FROM data_want T1
    ORDER BY t1.ID, t1.date1
    

    COALESCE(t1.date1 - LAG(t1.date1) OVER (PARTITION BY t1.ID ORDER BY T1.date1),0) 将给出相同的结果(差异 = 0 首次访问)。如果没有默认子句或 COALESCE,首次访问将为 NULL。

    【讨论】:

      【解决方案2】:

      我猜你可以尝试这样做:

      SELECT   t1.visit, t1.date1,T2.date1, DATEDIFF(t2.date1, t1.date1) t as difference
      FROM data_want T1
      left join data_want T2
      on T1.visit=T2.visit
      WHERE t2.date1 > t1.date1
      

      【讨论】:

      • 谢谢,我也试过了.. 但它给出了一个错误:date1 与定义的数据类型不匹配!!! (datediff(t2.date1....)
      • datediff 语法:DATEDIFF(day, t2.date1, t1.date1) 因为差异给出了错误 Expected something between '(' 和 'day' 关键字!
      • DATEDIFF 不是 Teradata 函数
      猜你喜欢
      • 1970-01-01
      • 2012-03-11
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多