【问题标题】:Concatenating certain rows based on certain conditions in Teradata SQL根据 Teradata SQL 中的某些条件连接某些行
【发布时间】:2016-10-27 08:31:45
【问题描述】:

我有一个结构如下的表:

Sr.No | Timestamp | Type
1        A          x
1        B          y
1        C          v 
1        D          w
2        E          j 
2        F          l
3        G          o

我想计算所有 Sr.No 的时间差,只要时间差小于 12 小时,我想连接“类型”列。 因此,如果 A-B = 11 小时且 E-F = 10 小时,则输出应为:

Sr.No | Type
1       x + y
1       v 
1       w
2       j + l
3       o

如何在 Teradata SQL 中执行此操作?

【问题讨论】:

  • 您能详细介绍数据类型并显示一些实际数据吗?还有,为什么要标记 sql-server,而它是 Teradata?
  • 编辑了标签。两者的数据类型都是varchar,我无法显示任何实际数据,但它具有相似的结构
  • 存储在 Varchar 中的时间戳?哎哟。如果在这 12 小时的时间差内有超过两行怎么办?你需要详细说明。
  • A 不是有效的时间戳值。对于该示例,您如何计算 AB 之间的小时差?

标签: sql concatenation teradata dynamic-sql


【解决方案1】:

我不了解 tera 数据,但在我看来,您主要对 sql 感兴趣。在下面的 sql 中,我只是简单地减去时间戳值来找到小时差。您需要根据 tera 数据进行转换。请在下面找到示例 sql:

select t1.sno, t1.type | '+' |t2.type 
from tbl t1
inner join tbl t2 on t1.sno = t2.sno and t1.type <> t2.type
where t1.timestamp -t2.timestamp < 12
union 
select t3.sno,t3.type
from tbl t3
left join
(
    select t5.sno, t5.type,t6.type 
    from tbl t5
    inner join tbl t6 on t5.sno = t6.sno and t5.type <> t6.type
    where t5.timestamp -t6.timestamp < 12
) t4 on t3.sno = t4.sno and (t3.type=t4.type1 or t3.type=t4.type2)
where t4.sno is null

【讨论】:

    猜你喜欢
    • 2015-07-01
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多