2016-10-27 7 views
1

Ich habe eine Tabelle mit der folgenden Struktur:verketten bestimmte Zeilen basierend auf bestimmten Bedingungen in 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 

Ich will die Zeitdifferenz für alle Sr.No berechnen, und überall dort, wo die Zeitdifferenz kleiner als 12 Stunden, ich möchte die Spalte "Typ" verketten. Also, wenn A-B = 11 Stunden und E-F = 10 Stunden, sollte die Ausgabe sein:

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

Wie kann ich dies tun in Teradata SQL?

+0

Können Sie Details über Datatypes & zeigen einige tatsächliche Daten? Und warum markieren Sie 'sql-server' bei Teradata? – dnoeth

+0

Bearbeitet die Tags. Der Datentyp in beiden ist varchar und ich kann keine tatsächlichen Daten anzeigen, aber es hat eine ähnliche Struktur – kaelthaas

+1

Ein Timestamp in einem Varchar gespeichert? Autsch. Und was, wenn es mehr als zwei Zeilen innerhalb dieser 12-Stunden-Differenz gibt? Sie müssen das näher ausführen. – dnoeth

Antwort

0

Ich habe keine Kenntnis von Tera-Daten, aber es scheint mir, dass Sie hauptsächlich an der Sql interessiert sind. Im folgenden sql subtrahiere ich einfach den Zeitstempelwert, um den Stundenunterschied zu finden. Sie müssen es nach Tera-Daten konvertieren. Finden Sie unten das Beispiel 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 
Verwandte Themen