Объединение определенных строк на основе определенных условий в Teradata SQL

У меня есть таблица со следующей структурой:

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?


person kaelthaas    schedule 27.10.2016    source источник
comment
Можете ли вы подробно рассказать о типах данных и показать некоторые фактические данные? И почему вы отмечаете sql-server, если это Teradata?   -  person dnoeth    schedule 27.10.2016
comment
Отредактировал теги. Тип данных в обоих случаях — varchar, и я не могу показать какие-либо фактические данные, но они имеют схожую структуру.   -  person kaelthaas    schedule 27.10.2016
comment
Временная метка хранится в Varchar? Ой. А что, если в пределах этой 12-часовой разницы есть более двух рядов? Вам нужно уточнить это.   -  person dnoeth    schedule 27.10.2016
comment
A не является допустимым значением метки времени. Как рассчитать разницу в часах между A и B для этого примера?   -  person a_horse_with_no_name    schedule 27.10.2016


Ответы (1)


Я не разбираюсь в тера данных, но мне кажется, что вас в основном интересует 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
person Dinesh Singh    schedule 27.10.2016