Überbuchte Werte ermitteln

PeterP4LE

Benutzer
Beiträge
7
Guten Morgen,

ich sitze aktuell vor folgendem Problem:

Ich habe 2 Tabellen mit folgenden Feldern:

Tabelle Planung
ID, Bezeichnung, Dauer, Projektnummer
Hier werden die Zeitvorgaben für eine Aufgabe erstellt

Tabelle Arbeitszeiten
ID, Planung_id, Dauer, Nummer
Hier werden die Zeiten zu einer Aufgabe erfasst, wobei "Planung_id" die Referenz zur Tabelle Planung darstellt.

Ich habe in der Tabelle Planung
1;Test 1;30;20110101
2,Test 2;60,20110101
3;Test 3;90,20110102

Ich habe in der Tabelle Arbeitszeiten
1;1;30;20110101
2;2;30;20110101
3;1;60;20110101
4;3;15;20110102
5;1;15;20110101

Somit habe ich die Aufgaben wie folgt bebucht:
1;Test 1 = 105
2,Test 2 = 30
3;Test 3 = 15

Ich brauche nun als Ergebnis meiner Selection nur die "überbuchten" Aufgaben, in meinem Fall also die Aufgabe "Test 1"

Ich habe schon div. Ansätze versucht mit Inner Join und verschachtelten Selects, komme hier aber nicht weiter.

Da ich in Sachen SQL nicht 100% sattelfest bin würde ich mich über eine Hilfe riesig freuen und bedanke mich schon im Vorfeld bei allen!

Lieb Grüße

Peter
 
Werbung:
Code:
test=# create table planung(id int primary key, bez text, dauer int);
CREATE TABLE
test=*# create table zeiten(id int primary key, p_id int references planung, dauer int);
CREATE TABLE
test=*# copy planung from stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 1  test1  30
>> 2  test2  60
>> 3  test3  90
>> \.
COPY 3
test=*# copy zeiten from stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 1  1  30
>> 2  1  30
>> 3  1  60
>> 4  3  15
>> 5  1  15
>> \.
COPY 5
test=*# update zeiten set p_id=2 where id = 2;
UPDATE 1

test=*# select * from planung left join (select p_id, sum(dauer) from zeiten group by p_id ) z on planung.id=z.p_id;
 id |  bez  | dauer | p_id | sum
----+-------+-------+------+-----
  1 | test1 |  30 |  1 | 105
  3 | test3 |  90 |  3 |  15
  2 | test2 |  60 |  2 |  30
(3 rows)

test=*# select * from planung left join (select p_id, sum(dauer) as gesamt from zeiten group by p_id ) z on planung.id=z.p_id where gesamt > dauer;
 id |  bez  | dauer | p_id | gesamt
----+-------+-------+------+--------
  1 | test1 |  30 |  1 |  105
(1 row)

test=*# rollback;
ROLLBACK
test=#

Und nun Kaffee!
 
Werbung:
Zurück
Oben