| 

.NET C# Java Javascript Exception

0
Ich habe folgende Tabellen Struktur:
v_start | v_end  | v_sorce
17 | 23 | A
150 | 188 | A
200 | 260 | A
19 | 30 | B
105 | 149 | B
199 | 220 | B
...

Ich hätte gerne die Daten so gruppiert das es immer dann eine Zeile gibt wenn sich v_start und v_end aus zwei oder mehreren Zeilen überlappen. Dabei ist es erst mal egal was v_sorce für einen wert hat.

Lösung:
Window-Funktionen ab Version 8.4
26.01.2011
Medrod 91 3
In deinem Beispiel wäre das dann eine Zeile für 17-23/19-30 und eine für 199-220/200-260. Richtig?
tboerner 27.01.2011
1 Antwort
0
Die Tabelle einfach im SELECT zweimal aufmachen und dann gegenseitig vergleichen.
Hier noch ein kleiner Umweg über ROW_NUMBER(), da es in deinem Beispiel keine eindeutige ID für die Datensätze gibt, um diese unterscheiden zu können. Ansonsten würden sich Überlappungen logischerweise auch dann ergeben, wenn der identische Satz in beiden Tabellen verglichen wird.

SELECT a.*, b.*
FROM ( SELECT *, ROW_NUMBER() OVER(ORDER BY v_start) AS id FROM tabelle ) a,
( SELECT *, ROW_NUMBER() OVER(ORDER BY v_start) AS id FROM tabelle ) b
WHERE a.v_start <= b.v_end AND a.v_end >= b.v_start
AND a.id < b.id


Nachtrag: Der Code ist für SQL-Server, bei PostgreSQL sollte es prinzipiell ähnlich klappen.
08.02.2011
commänder 281 6

Stelle deine Sql-Frage jetzt!