Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - SELECT * WHERE (die letzten Datensätze bis ein bool = true)
Christoph1972 - Do 21.06.12 17:05
Titel: SELECT * WHERE (die letzten Datensätze bis ein bool = true)
Hallo Leute,
ich würde gerne wissen, ob sich mittels SQL folgende Aufgabenstellung lösen lässt.
Und zwar habe ich folgende Tabellen Struktur:
Quelltext
1: 2: 3: 4: 5: 6: 7:
| ID Irgendwas EinBool 1 dsad false 2 juzu false 3 dsak true 4 khjh false 5 1234 false 6 5678 false |
Ich möchte die letzten Datensätze bis zum ersten true selektieren.
Das Ergebnis soll so aussehen:
Quelltext
1: 2: 3: 4: 5:
| ID Irgendwas EinBool 3 dsak true 4 khjh false 5 1234 false 6 5678 false |
Ist das überhaupt möglich? Über Tipps und Anregungen freue ich mich wie immer!
Ralf Jansen - Do 21.06.12 17:55
Wenn ID dein Kriterium für die Reihenfolge ist dann
SQL-Anweisung
1: 2: 3: 4: 5:
| SELECT * FROM table WHERE ID >= (SELECT min(ID) FROM table WHERE EinBool = 'true') |
Sollte eigentlich in jeder halbwegs ANSI konformen DB funktionieren. Das Verhalten eines Bool, wenn die DB den Typ überhaupt kennt, ist das einzige DB spezifische (ob 1,0 oder true, false oder 'true', 'false' oder ...).
Christoph1972 - Do 21.06.12 19:45
Ah super! Meine theoretische Lösung hat ähnlich ausgesehen. Ich werde mich morgen mal an die Umsetzung machen.
Vielen Dank schon mal!
Sinspin - Do 21.06.12 20:54
Ralf Jansen hat folgendes geschrieben : |
SQL-Anweisung 1: 2: 3: 4: 5:
| SELECT * FROM table WHERE ID >= (SELECT min(ID) FROM table WHERE EinBool = 'true') | |
Das haut hin solange in der Tabelle nur ein
'true' drinne ist. Sind es mehr wird alles ab dem ersten geliefert. Es soll aber alles ab dem letzten geliefert werden wenn ich das richtig verstanden habe.
SQL-Anweisung
1: 2: 3: 4: 5:
| SELECT * FROM table WHERE ID >= (SELECT TOP 1 ID FROM table WHERE EinBool = 'true' ORDER BY ID DESC) |
Irgendwie habe ich zwar das Gefühl das es noch einfacher geht aber ich komme nicht drauf.
Ralf Jansen - Do 21.06.12 21:21
Zitat: |
Das haut hin solange in der Tabelle nur ein 'true' drinne ist. Sind es mehr wird alles ab dem ersten geliefert |
Christoph hat geschrieben
Zitat: |
Ich möchte die letzten Datensätze bis zum ersten true selektieren. |
Sollte Christoph gemeint haben was er schrieb ist min(ID) richtig und man kann halt dann auch mehrere Datensätze mit EinBool = true im Ergebnis haben. Ist deine Interpretation richtig dann machen wir halt aus dem min(ID) ein max(ID). Vermutlich ist ein min bzw. max auch schneller als Top + Order by (ASC oder DESC).
Zitat: |
Irgendwie habe ich zwar das Gefühl das es noch einfacher geht aber ich komme nicht drauf. |
Einfacher wird es nicht. Man hat immer einen Vergleich mit anderen Datensätzen in der gleichen Tabelle. Die Tabelle wird also immer 2 mal gebraucht werden. Alternativ kann man auch Lösungen mit einem Self-Join versuchen. Sind aber nicht einfacher und persönlich halte ich einen Subselect für lesbarer als einen Self-Join.
Christoph1972 - Fr 22.06.12 20:34
Vielen Dank euch beiden! Ich habe den Vorschlag von Ralf übernommen, nach dem ich das min auf max geändert habe, hat diese genau das geliefert, was ich brauchte. SQL finde ich wirklich gut, wenn man erst mal sieht wie etwas gemacht werden kann, dann erscheint es immer logisch. Mit etwas Übung kann man doch recht kreativ sein. Schade das ich nicht häufiger damit zu tun habe....
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!