Gibt es dafür ein SQL-Query?

conrado

Grünschnabel
Hallo Forum,

bin kein Datenbankexperte, deshalb frage ich mich ob es für mein Problem überhaupt ein SQL-Query gibt oder ob ich mich eines anderen Weges bedienen muss, der leider viel umständlicher sein wird.

Folgende Tabelle:

o | k | ende |
1 | 1 | 2014 |
2 | 1 | 2013 |
3 | 1 | 2017 |
1 | 2 | 2011 |
2 | 2 | 2014 |
3 | 2 | 2013 |
1 | 3 | 2006 |
2 | 3 | 2005 |
3 | 3 | 2004 |

Die Abfrage soll alle "k" ausgeben, bei denen !alle! "o" die den gleichen "k" haben, ein "ende" kleiner als 2007 haben.
Das richtige Ergebnis wäre also "3", denn ich in k3 sind alle "o" kleiner 2007.
Ich habe schon mit einigen GROUP und WHERE-Ausdrücken herumprobiert, bin aber zu keiner Lösung gekommen.
Vielleicht hat hier jemand eine Idee?

Danke im Voraus,

Conrad
 
So müsste es funktionieren:
SQL:
SELECT *  FROM `table` WHERE ( `o` = `k` AND `ende` < 2007 )
 
Hallo tobee,

danke erstmal dafür. Das gibt mir leider nur die Os an, deren Nummer die gleiche wie die des Ks ist und ein ende kleiner 2007 hat.
Ich brauche aber nur Ks, bei denen alle Os kleiner 2007 sind. Wäre in der vorletzten und drittvorletzten Zeile das Ende größer 2007 würde er mir trotzdem die letzte Spalte geben.
Vielleicht ist es so realistischer:

o | k | ende |
1 | 1 | 2014 |
2 | 1 | 2013 |
3 | 1 | 2017 |
4 | 2 | 2011 |
5 | 2 | 2014 |
6 | 2 | 2013 |
7 | 3 | 2006 |
8 | 3 | 2005 |
9 | 3 | 2004 |
 
Hi!

Ich hoffe, das ist jetzt nicht totaler Stuss ;)
SQL:
SELECT * FROM tabelle GROUP BY k HAVING MAX(ende) < 2007

Liebe Grüße,
Mark.
 
Probier mal das:

select
*
from
table
where
(k in (select k from table group by k having max(ende) < 2007))

wobei subselects nicht in allen DB zugelassen sind! Ggf. kannste das ja dann noch gruppieren. Ich hab das nur hingeschrieben, nicht getestet ;)

Dirk
 
@Mark

Nein, das ist kein totaler Stuß, das funktioniert wunderbar! Vielen Dank!
Jetzt weiss ich auch etwas mit GROUP BY anzufangen.

Danke auch an Niederbobi, das funktioniert eigentlich auch.

Grüße
Conrad
 

Neue Beiträge

Zurück