Guten Tag,
ich habe mein Anliegen bereits im PHP Forum gepostet und wurde mit meinem Problem nun an dieses Forum verwiesen.
Mein Post aus dem anderen Forum:
Ich brauche bei folgendem Problem ein wenig Hilfe..
Ich habe eine Tabelle mit diesem Inhalt:
Ich brauche nun ein SQL Statement, welches die Wechsel von Wert2 in der Kombination mit Wert1 rausfiltert und mit die passende ID dazu ausspuckt.
Wert1 und Wert2 sind nicht fortlaufend, da es nur Schlüssel zu anderen Tabellen sind.
Über Wert1 findet eine Gruppierung der einzelnen Zeilen statt.
Also die IDs 3, 6, 9.
Ausgeführt wird das auf einem Microsoft SQL Server 2008R2.. Wobei ich es jetzt nicht auf ein komplettes SQL Statement abgesehen habe. Ein Ansatz würde mir auch schon reichen.
Hat jemand eine Idee?
Die Tabelle ist in der Realität ein wenig komplizierter. Mein Beispiel ist nur eine abstrahierte Darstellung.
Der Benutzer akretschmer hat freundlicher Weise diesen Lösungsansatz entwickelt.
leider unterstützt der SQL Server kein lag().
Benutzer erc hatte folgende Idee:
Da das Problem anscheinend tatsächlich ein wenig spezieller ist, nun meine frage an die SQL Profis. Kann mir hier evtl. jemand weiterhelfen?
ich habe mein Anliegen bereits im PHP Forum gepostet und wurde mit meinem Problem nun an dieses Forum verwiesen.
Mein Post aus dem anderen Forum:
Ich brauche bei folgendem Problem ein wenig Hilfe..
Ich habe eine Tabelle mit diesem Inhalt:
Code:
ID | Wert1 | Wert2
1 | 1 | 1
2 | 1 | 1
3 | 1 | 50 (<---)
4 | 1 | 50
5 | 9 | 40
6 | 9 | 1 (<---)
7 | 3 | 1
8 | 3 | 1
9 | 3 | 5 (<---)
Ich brauche nun ein SQL Statement, welches die Wechsel von Wert2 in der Kombination mit Wert1 rausfiltert und mit die passende ID dazu ausspuckt.
Wert1 und Wert2 sind nicht fortlaufend, da es nur Schlüssel zu anderen Tabellen sind.
Über Wert1 findet eine Gruppierung der einzelnen Zeilen statt.
Also die IDs 3, 6, 9.
Ausgeführt wird das auf einem Microsoft SQL Server 2008R2.. Wobei ich es jetzt nicht auf ein komplettes SQL Statement abgesehen habe. Ein Ansatz würde mir auch schon reichen.
Hat jemand eine Idee?
Die Tabelle ist in der Realität ein wenig komplizierter. Mein Beispiel ist nur eine abstrahierte Darstellung.
Der Benutzer akretschmer hat freundlicher Weise diesen Lösungsansatz entwickelt.
Code:
test=*# select id, wert1, wert2, case when wert2 != lag then '<---' else '' end as info from(select id, wert1, wert2, lag(wert2) over (partition by wert1 order by id) from foo) x;
id | wert1 | wert2 | info
----+-------+-------+------
1 | 1 | 1 |
2 | 1 | 1 |
3 | 1 | 2 | <---
4 | 1 | 2 |
5 | 2 | 3 |
6 | 2 | 4 | <---
7 | 3 | 5 |
8 | 3 | 5 |
9 | 3 | 6 | <---
(9 rows)
Benutzer erc hatte folgende Idee:
Code:
SET @a=NULL, @b=NULL;
SELECT IF(@a!=Wert1,@b:=Wert2,0), IF(@a!=Wert1,@a:=Wert1,0), ID, Wert1, Wert2, IF(@b!=Wert2,'<---','') As info,IF(@b!=Wert2,@b:=Wert2,0) FROM foo ORDER BY ID
Da das Problem anscheinend tatsächlich ein wenig spezieller ist, nun meine frage an die SQL Profis. Kann mir hier evtl. jemand weiterhelfen?