conrado
Goto Top

Gibt es dafür ein SQL-Query?

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 ausspucken, bei denen alle o ein ende kleiner 2007 haben.
Das Ergebnis wäre '3'.
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

Content-ID: 55108

Url: https://administrator.de/forum/gibt-es-dafuer-ein-sql-query-55108.html

Ausgedruckt am: 24.12.2024 um 16:12 Uhr

filippg
filippg 27.03.2007 um 04:05:08 Uhr
Goto Top
SELECT o FROM Tabelle WHERE ende < 2007 MINUS SELECT o FROM Tabelle WHERE ende >= 2007 sollte eigentlich das gewünschte Ergebnis liefern.
Näheres auch unter http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/index.htm

Filipp

Edit: os sollen natürlich ks sein. Aber mit dieser kleinen Änderung finde ich sollte das Ergebnis ganz gut hinkommen.
Guenni
Guenni 27.03.2007 um 06:19:46 Uhr
Goto Top
@12434

Hi,

da in dieser Tabelle all o und alle k das gleiche Ende haben,
genügt eigentlich "select k from tabelle where ende < 2007".

Oder soll das Ergebnis 3 die Anzahl k sein?

"select count(k) as "Anzahl k" from tabelle where ende < 2007".

Grüße
Günni
conrado
conrado 27.03.2007 um 11:16:21 Uhr
Goto Top
Hallo,

danke erstmal für euren Mühen. O sind Ordner und K sind Kartons. Es sollen alle Kartons angegeben werden, in denen !alle! Ordner kleiner 2007 sind. In diesem Falle ist das Ergebnis Karton 3. Das Problem ist halt irgendwie das gruppieren und überprüfen ob bei allen Elementen mit k=1, k=2, k=3 auch bei allen o das ende kleiner 2007 ist.
Biber
Biber 27.03.2007 um 12:49:20 Uhr
Goto Top
Moin conrado,

hier muss ich mich mal als Mod einmengen, weil... so wird das Ergebnis unbefriedigend bleiben.

  • Wenn es um SQL-Queries geht, bitte das konkrete Datenbank-Blech angeben, das darunterliegt (Access, mySQL, Oracle...etc).
  • bei Deiner Fragestellung ist nicht klar, ob als Ergebnis nun alle relevanten Datensätze (mit allen Feldern) rausfallen sollen oder das Ziel ein "Select Distinct (Kartons)..." , also im Ergebnis ein Resultset mit in Deinem Fall einem Feld k Inhalt 3 sein soll oder
  • so etwas wie ein "SELECT * FROM kartons GROUP BY k HAVING Max(ende) < 2007"

Deine letzte Erläuterung mit "k sind Kartons und o sind Ordner" hilft zwar schon ein bisschen weiter als der Eröffnungsthread, aber richtig transparent wird mir das Datenmodell noch nicht ganz. Bzw. das, was dort fachlich/inhaltlich abgebildet wird.

Wenn das alles zu weit führen würde, dann gehe bitte den oben begonnen Weg weiter und poste zu der Skizze "alle Datensätze" noch zusätzlich die Skizze "Gewünschtes Ergebnis der Abfrage".

Danke
Biber
Guenni
Guenni 27.03.2007 um 21:30:49 Uhr
Goto Top
@conrado

Hi,

jetzt wird einiges klarer, glaub' ich zumindest.

Du hast die Ordner 1,2,3,1,2,3 usw. genannt.
Das macht die Sache einigermaßen unklar. Besser wäre es, die Ordner
fortlaufend zu nummerieren.

Dann gehe hin, und ändere bei einigen Datensätzen, als Test, das Ende(unter 2007),
und führe folg. Befehl aus:

SELECT o.o AS Ordner, k.k AS "In Karton", o.ende as "Ordner Ende"
FROM tabelle o, tabelle k
WHERE o.ende <2007
AND o.ende = k.ende


Somit erhalte ich alle Kartons, in denen Ordner < 2007 stecken.

Grüße
Günni
conrado
conrado 27.03.2007 um 22:02:37 Uhr
Goto Top
Danke für eure Hilfe,

dass ich ein paar Infos zu wenig gegeben habe, habe ich mir auch schon gedacht.
Günni hat das Problem, das Query von Biber funktioniert genauso gut.

Ich habe mich nochmal mit GROUP BY beschäftigt und verstehe jetzt auch wie es funktioniert, danke nochmal für eure Hilfe mit Lerneffekt.


Grüße
Conrad