SQL komplizierte SQL Abfrage

estre

Commander
Registriert
Dez. 2005
Beiträge
3.006
Hallo zusammen,

ich habe ein kleines Problem mit einer SQL-Abfrage bei dem ihr mir bestimmt weiterhelfen könnt:

Und zwar habe ich folgende Tabelle:
[table="width: 500, class: grid"]
[tr]
[td]Rechnung[/td]
[td]Rechnungsnummer[/td]
[td]gueltig_ab[/td]
[td]Abrechnung_von[/td]
[td]Abrechnung_bis[/td]
[td]RNr_Folgerechnung[/td]
[/tr]
[tr]
[td]Rechnung 1[/td]
[td]Rechnungsnummer[/td]
[td]01.06.2012[/td]
[td]01.06.2012[/td]
[td]31.06.2012[/td]
[td][/td]
[/tr]
[tr]
[td]Rechnung 2[/td]
[td]Rechnungsnummer[/td]
[td]01.07.2012[/td]
[td]01.07.2012[/td]
[td]30.11.2012[/td]
[td][/td]
[/tr]
[tr]
[td]Rechnung 3[/td]
[td]Rechnungsnummer[/td]
[td]01.12.2012[/td]
[td]01.12.2012[/td]
[td]30.11.2012[/td]
[td][/td]
[/tr]
[tr]
[td]Rechnung 4[/td]
[td]Rechnungsnummer[/td]
[td]02.12.2012[/td]
[td]02.12.2012[/td]
[td]31.06.2013[/td]
[td][/td]
[/tr]

[tr]
[td]Rechnung 5[/td]
[td]Rechnungsnummer[/td]
[td]01.07.2013[/td]
[td]01.07.2013[/td]
[td]31.08.2013[/td]
[td][/td]
[/tr]
[/table]

Die Herausforderung besteht nun darin, dass ich von allen Rechnungen, wo Abrechnung_von > Abrechnung_bis die Rechnungsnummer an die Folgerechnung schreiben muss. In diesem Beispiel müsste ich also die Rechnungsnummer von Rechnung 3 bei Rechnung 4 ergänzen (in der Spalte RNr_Folgerechnung).

Von der Logik her müsste der Code so aussehen:
select rechnungsnummer from blabla where abrechnung_von > abrechnung_bis
-> nehme diese Rechnungsnummer und schreibe sie in Spalte RNr_Folgerechnung von
select rechnungsnummer from blabla where abrechnung_von > abrechnung_bis wo gueltig ab = +1


Kann mir da jemand weiterhelfen :)?

Vielen Dank!!
 
Code:
update rechnung r1, rechnung r2
set r1.rnr_folgerechnung = r2.rechnungsnummer
where r1.abrechnung_von > r1.abrechnung_bis
and r2.gueltig_ab = DATE_ADD(r1.gueltig_ab, INTERVAL 1 DAY);

DATE_ADD ist eine MySQL-Funktion; falls du eine andere Datenbank benutzt, musst du dir das entsprechende Pendant raussuchen.
 
Zuletzt bearbeitet:
wow, vielen Dank für die schnelle Hilfe!

@Nullpointer:
Ich nutze eine MSSQL-DB und habe die genannte Funktion entsprechend angepasst, jedoch funktioniert es leider nicht wie gewünscht.
Kann es sein, dass MSSQL diese Verknüpfung mit t1 u. t2 in einem Update-Statement nicht erlaubt?

Grüße

edit: Kommando zurück, ich habe es herausgefunden:

Code:
Update Table
set table.rnr_folgerechnung = r2.rechnungsnummer
FROM (SELECT * FROM table) r2
where
table.abrechnung_von > table.abrechnung_bis
and r2.gueltig_ab = DATEADD(day,1,r2.gueltig_ab, INTERVAL 1 DAY);
 
Zuletzt bearbeitet:
Zurück
Oben