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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
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
6 Kommentare
Neuester Kommentar
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.
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.
Moin conrado,
hier muss ich mich mal als Mod einmengen, weil... so wird das Ergebnis unbefriedigend bleiben.
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
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
@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
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