![]() | |
#1
| |||
| |||
|
#2
| |||
| |||
|
|
Hallo NG, ich habe folgendes Problem: Ich möchte eine Tabelle Abfragen und muss das Ergebnis in einer Weise sortiert ausgeben, für die ich nicht weiß, wie ich den SQL-String aufbauen muss. Sagen wir der Einfachheit halber, die Tabelle hätte nur 2 Spalten. In der ersten steht ein Datum, in der zweiten ein Veranstaltungstyp. Hier ein Beispiel Datum | Typ 08.11.2011 | Veranstaltung A 18.11.2011 | Veranstaltung B 01.11.2011 | Veranstaltung A 10.11.2011 | Veranstaltung C 05.11.2011 | Veranstaltung B Veranstaltungen können also mehrfach auftauchen. Die zu erstellende Abfrage soll mir nun alle Datensätze wiedergeben und dabei so sortieren, dass die früheste Veranstaltung zuerst angezeigt wird, anschließend in zeitlich aufsteigender Folge alle weiteren gleichen Veranstaltungen. Danach kommt die nächste andere Veranstaltung, die zeitlich nach dem ersten Termin liegt und dann wiederum alle gleichen Veranstaltungen in aufsteigender Reihenfolge und so weiter. Das ist etwas kompliziert zu beschreiben. Darum hier das gewünschte Abfrageergebnis für die obige Tabelle: Datum | Typ 01.11.2011 | Veranstaltung A 08.11.2011 | Veranstaltung A 05.11.2011 | Veranstaltung B 18.11.2011 | Veranstaltung B 10.11.2011 | Veranstaltung C Die früheste Veranstaltung ist die Veranstaltung A am 01.11.2011; anschließend werden in aufsteigender Reihefolge alle anderen Veranstaltungen des Typs A aufgeführt. Die nächste Veranstaltung nach dem 01.11.2011, die nicht Typ A ist, ist die Veranstaltung B am 05.11.2011. Sie wird darum als nächstes aufgeführt, wiederum gefolgt von allen anderen Veranstaltungen des gleichen Typs in zeitlich aufsteigender Reihenfolge etc. Im Ergebnis sollen die Veranstaltungen also nach Typen in Blöcken zusammengefasst werden, wobei die Reihefolge der Blöcke von der Chronologie der jeweils ersten Termine der Blöcke abhängt. Vielleicht fällt einem von euch eine ganz einfache Lösung für so eine Sortierung ein? |
#3
| |||
| |||
|
|
In article <j8e8d5$4j5$1 (AT) online (DOT) de>, Thomas Gehrmann <webmaster (AT) arbeitszeitberatung (DOT) de> wrote: Hallo NG, ich habe folgendes Problem: Ich möchte eine Tabelle Abfragen und muss das Ergebnis in einer Weise sortiert ausgeben, für die ich nicht weiß, wie ich den SQL-String aufbauen muss. Sagen wir der Einfachheit halber, die Tabelle hätte nur 2 Spalten. In der ersten steht ein Datum, in der zweiten ein Veranstaltungstyp. Hier ein Beispiel Datum | Typ 08.11.2011 | Veranstaltung A 18.11.2011 | Veranstaltung B 01.11.2011 | Veranstaltung A 10.11.2011 | Veranstaltung C 05.11.2011 | Veranstaltung B Veranstaltungen können also mehrfach auftauchen. Die zu erstellende Abfrage soll mir nun alle Datensätze wiedergeben und dabei so sortieren, dass die früheste Veranstaltung zuerst angezeigt wird, anschließend in zeitlich aufsteigender Folge alle weiteren gleichen Veranstaltungen. Danach kommt die nächste andere Veranstaltung, die zeitlich nach dem ersten Termin liegt und dann wiederum alle gleichen Veranstaltungen in aufsteigender Reihenfolge und so weiter. Das ist etwas kompliziert zu beschreiben. Darum hier das gewünschte Abfrageergebnis für die obige Tabelle: Datum | Typ 01.11.2011 | Veranstaltung A 08.11.2011 | Veranstaltung A 05.11.2011 | Veranstaltung B 18.11.2011 | Veranstaltung B 10.11.2011 | Veranstaltung C Die früheste Veranstaltung ist die Veranstaltung A am 01.11.2011; anschließend werden in aufsteigender Reihefolge alle anderen Veranstaltungen des Typs A aufgeführt. Die nächste Veranstaltung nach dem 01.11.2011, die nicht Typ A ist, ist die Veranstaltung B am 05.11.2011. Sie wird darum als nächstes aufgeführt, wiederum gefolgt von allen anderen Veranstaltungen des gleichen Typs in zeitlich aufsteigender Reihenfolge etc. Im Ergebnis sollen die Veranstaltungen also nach Typen in Blöcken zusammengefasst werden, wobei die Reihefolge der Blöcke von der Chronologie der jeweils ersten Termine der Blöcke abhängt. Vielleicht fällt einem von euch eine ganz einfache Lösung für so eine Sortierung ein? Thomas, Leider is mein Deutsch nicht gut genug zu erzählen. Versuche diese: SELECT Datum,Tabelle.Typ FROM (SELECT MIN(Datum) AS Mindatum, Typ FROM Tabelle GROUP BY Typ) AS t INNER JOIN Tabelle ON Tabelle.Typ=t.Typ ORDER BY Mindatum,Datum; Wenn die Tabelle gross ist, brauchst Du eine Index auf Typ. MfG, Tony -- Tony Mountifield Work: tony (AT) softins (DOT) co.uk - http://www.softins.co.uk Play: tony (AT) mountifield (DOT) org - http://tony.mountifield.org |
#4
| |||
| |||
|
|
Hi Tony, mag sein, dass dein deutsch nicht perfekt ist, deine Lösung hingegen kommt dem schon sehr nahe :-) Hab ganz herzlichen Dank. So sieht das Ergebnis dann mit den echten Daten aus, um die es geht: http://www.arbeitszeitberatung.de/04...ngen/test.aspx Das ist wirklich nahezu perfekt. Aber es gibt seltsamerweise zwei Veranstaltungen, die sich nicht an die Sortierung halten, nämlich Tages-Seminar Optimierung der Abläufe im OP 07.05.2012, Hannover und Tages-Seminar Vertrauensarbeitszeit - Gestaltungsperspektiven und Umsetzung 14.11.2012, Berlin Diese beiden Veranstaltungen müssten weiter unten einsortiert werden. Ich kann mir irgendwie nicht erklären, warum es bei denen nicht klappt, bei allen anderen aber schon. Schau mal, so sieht jetzt der echte SQL-String aus. Fällt dir daran vielleichte etwas auf, woran es liegen könnte: strSQL = "SELECT * FROM (SELECT MIN(Datum1) AS Mindatum, Titel FROM webdb GROUP BY Titel) AS t INNER JOIN webdb ON webdb.Titel=t.Titel ORDER BY Mindatum,Datum1" Die Tabelle enthält übrigens nur die 38 Datensätze und viel mehr werden aus auch nicht (maximal vielleicht 50). Auf jeden Fall schon mal vielen, vielen Dank Thomas "Tony Mountifield" <tony (AT) mountifield (DOT) org> schrieb im Newsbeitrag news:j8ebes$n4o$1 (AT) softins (DOT) clara.co.uk... In article <j8e8d5$4j5$1 (AT) online (DOT) de>, Thomas Gehrmann <webmaster (AT) arbeitszeitberatung (DOT) de> wrote: Hallo NG, ich habe folgendes Problem: Ich möchte eine Tabelle Abfragen und muss das Ergebnis in einer Weise sortiert ausgeben, für die ich nicht weiß, wie ich den SQL-String aufbauen muss. Sagen wir der Einfachheit halber, die Tabelle hätte nur 2 Spalten. In der ersten steht ein Datum, in der zweiten ein Veranstaltungstyp. Hier ein Beispiel Datum | Typ 08.11.2011 | Veranstaltung A 18.11.2011 | Veranstaltung B 01.11.2011 | Veranstaltung A 10.11.2011 | Veranstaltung C 05.11.2011 | Veranstaltung B Veranstaltungen können also mehrfach auftauchen. Die zu erstellende Abfrage soll mir nun alle Datensätze wiedergeben und dabei so sortieren, dass die früheste Veranstaltung zuerst angezeigt wird, anschließend in zeitlich aufsteigender Folge alle weiteren gleichen Veranstaltungen. Danach kommt die nächste andere Veranstaltung, die zeitlich nach dem ersten Termin liegt und dann wiederum alle gleichen Veranstaltungen in aufsteigender Reihenfolge und so weiter. Das ist etwas kompliziert zu beschreiben. Darum hier das gewünschte Abfrageergebnis für die obige Tabelle: Datum | Typ 01.11.2011 | Veranstaltung A 08.11.2011 | Veranstaltung A 05.11.2011 | Veranstaltung B 18.11.2011 | Veranstaltung B 10.11.2011 | Veranstaltung C Die früheste Veranstaltung ist die Veranstaltung A am 01.11.2011; anschließend werden in aufsteigender Reihefolge alle anderen Veranstaltungen des Typs A aufgeführt. Die nächste Veranstaltung nach dem 01.11.2011, die nicht Typ A ist, ist die Veranstaltung B am 05.11.2011. Sie wird darum als nächstes aufgeführt, wiederum gefolgt von allen anderen Veranstaltungen des gleichen Typs in zeitlich aufsteigender Reihenfolge etc. Im Ergebnis sollen die Veranstaltungen also nach Typen in Blöcken zusammengefasst werden, wobei die Reihefolge der Blöcke von der Chronologie der jeweils ersten Termine der Blöcke abhängt. Vielleicht fällt einem von euch eine ganz einfache Lösung für so eine Sortierung ein? Thomas, Leider is mein Deutsch nicht gut genug zu erzählen. Versuche diese: SELECT Datum,Tabelle.Typ FROM (SELECT MIN(Datum) AS Mindatum, Typ FROM Tabelle GROUP BY Typ) AS t INNER JOIN Tabelle ON Tabelle.Typ=t.Typ ORDER BY Mindatum,Datum; Wenn die Tabelle gross ist, brauchst Du eine Index auf Typ. MfG, Tony -- Tony Mountifield Work: tony (AT) softins (DOT) co.uk - http://www.softins.co.uk Play: tony (AT) mountifield (DOT) org - http://tony.mountifield.org |
#5
| |||
| |||
|
|
Hi Tony, mag sein, dass dein deutsch nicht perfekt ist, deine Lösung hingegen kommt dem schon sehr nahe :-) Hab ganz herzlichen Dank. So sieht das Ergebnis dann mit den echten Daten aus, um die es geht: http://www.arbeitszeitberatung.de/04...ngen/test.aspx Das ist wirklich nahezu perfekt. Aber es gibt seltsamerweise zwei Veranstaltungen, die sich nicht an die Sortierung halten, nämlich Tages-Seminar Optimierung der Abläufe im OP 07.05.2012, Hannover und Tages-Seminar Vertrauensarbeitszeit - Gestaltungsperspektiven und Umsetzung 14.11.2012, Berlin Diese beiden Veranstaltungen müssten weiter unten einsortiert werden. Ich kann mir irgendwie nicht erklären, warum es bei denen nicht klappt, bei allen anderen aber schon. Schau mal, so sieht jetzt der echte SQL-String aus. Fällt dir daran vielleichte etwas auf, woran es liegen könnte: strSQL = "SELECT * FROM (SELECT MIN(Datum1) AS Mindatum, Titel FROM webdb GROUP BY Titel) AS t INNER JOIN webdb ON webdb.Titel=t.Titel ORDER BY Mindatum,Datum1" Die Tabelle enthält übrigens nur die 38 Datensätze und viel mehr werden aus auch nicht (maximal vielleicht 50). Auf jeden Fall schon mal vielen, vielen Dank Thomas "Tony Mountifield" <tony (AT) mountifield (DOT) org> schrieb im Newsbeitrag news:j8ebes$n4o$1 (AT) softins (DOT) clara.co.uk... In article <j8e8d5$4j5$1 (AT) online (DOT) de>, Thomas Gehrmann <webmaster (AT) arbeitszeitberatung (DOT) de> wrote: Hallo NG, ich habe folgendes Problem: Ich möchte eine Tabelle Abfragen und muss das Ergebnis in einer Weise sortiert ausgeben, für die ich nicht weiß, wie ich den SQL-String aufbauen muss. Sagen wir der Einfachheit halber, die Tabelle hätte nur 2 Spalten. In der ersten steht ein Datum, in der zweiten ein Veranstaltungstyp. Hier ein Beispiel Datum | Typ 08.11.2011 | Veranstaltung A 18.11.2011 | Veranstaltung B 01.11.2011 | Veranstaltung A 10.11.2011 | Veranstaltung C 05.11.2011 | Veranstaltung B Veranstaltungen können also mehrfach auftauchen. Die zu erstellende Abfrage soll mir nun alle Datensätze wiedergeben und dabei so sortieren, dass die früheste Veranstaltung zuerst angezeigt wird, anschließend in zeitlich aufsteigender Folge alle weiteren gleichen Veranstaltungen. Danach kommt die nächste andere Veranstaltung, die zeitlich nach dem ersten Termin liegt und dann wiederum alle gleichen Veranstaltungen in aufsteigender Reihenfolge und so weiter. Das ist etwas kompliziert zu beschreiben. Darum hier das gewünschte Abfrageergebnis für die obige Tabelle: Datum | Typ 01.11.2011 | Veranstaltung A 08.11.2011 | Veranstaltung A 05.11.2011 | Veranstaltung B 18.11.2011 | Veranstaltung B 10.11.2011 | Veranstaltung C Die früheste Veranstaltung ist die Veranstaltung A am 01.11.2011; anschließend werden in aufsteigender Reihefolge alle anderen Veranstaltungen des Typs A aufgeführt. Die nächste Veranstaltung nach dem 01.11.2011, die nicht Typ A ist, ist die Veranstaltung B am 05.11.2011. Sie wird darum als nächstes aufgeführt, wiederum gefolgt von allen anderen Veranstaltungen des gleichen Typs in zeitlich aufsteigender Reihenfolge etc. Im Ergebnis sollen die Veranstaltungen also nach Typen in Blöcken zusammengefasst werden, wobei die Reihefolge der Blöcke von der Chronologie der jeweils ersten Termine der Blöcke abhängt. Vielleicht fällt einem von euch eine ganz einfache Lösung für so eine Sortierung ein? Thomas, Leider is mein Deutsch nicht gut genug zu erzählen. Versuche diese: SELECT Datum,Tabelle.Typ FROM (SELECT MIN(Datum) AS Mindatum, Typ FROM Tabelle GROUP BY Typ) AS t INNER JOIN Tabelle ON Tabelle.Typ=t.Typ ORDER BY Mindatum,Datum; Wenn die Tabelle gross ist, brauchst Du eine Index auf Typ. MfG, Tony -- Tony Mountifield Work: tony (AT) softins (DOT) co.uk - http://www.softins.co.uk Play: tony (AT) mountifield (DOT) org - http://tony.mountifield.org |
#6
| |||
| |||
|
|
Hallo noch einmal, Tony, ich hatte das Problem auch in einer anderen Newsgroup gepostet. Dort habe ich jetzt eine Antwort bekommen, die deiner sehr ähnlich ist, bei der aber wirklich alle Daten korrekt sortiert werden. Der String sieht dann so aus: strSQL = "SELECT * FROM webdb ta ORDER BY (SELECT MIN(datum1) FROM webdb tb WHERE tb.titel = ta.titel GROUP BY tb.titel), ta.titel, ta.datum1" und so das Ergebnis: http://www.arbeitszeitberatung.de/04...gen/test2.aspx Ich verstehe ehrlich gesagt nicht wirklich, was da genau den Unterschied ausmacht, bin aber auf jeden Fall froh, jetzt die perfekte Lösung zu haben. Also ganz herzlichen Dank noch einmal. Viele Grüße Thomas "Thomas Gehrmann" <webmaster (AT) arbeitszeitberatung (DOT) de> schrieb im Newsbeitrag news:j8eeqn$9ih$1 (AT) online (DOT) de... Hi Tony, mag sein, dass dein deutsch nicht perfekt ist, deine Lösung hingegen kommt dem schon sehr nahe :-) Hab ganz herzlichen Dank. So sieht das Ergebnis dann mit den echten Daten aus, um die es geht: http://www.arbeitszeitberatung.de/04...ngen/test.aspx Das ist wirklich nahezu perfekt. Aber es gibt seltsamerweise zwei Veranstaltungen, die sich nicht an die Sortierung halten, nämlich Tages-Seminar Optimierung der Abläufe im OP 07.05.2012, Hannover und Tages-Seminar Vertrauensarbeitszeit - Gestaltungsperspektiven und Umsetzung 14.11.2012, Berlin Diese beiden Veranstaltungen müssten weiter unten einsortiert werden. Ich kann mir irgendwie nicht erklären, warum es bei denen nicht klappt, bei allen anderen aber schon. Schau mal, so sieht jetzt der echte SQL-String aus. Fällt dir daran vielleichte etwas auf, woran es liegen könnte: strSQL = "SELECT * FROM (SELECT MIN(Datum1) AS Mindatum, Titel FROM webdb GROUP BY Titel) AS t INNER JOIN webdb ON webdb.Titel=t.Titel ORDER BY Mindatum,Datum1" Die Tabelle enthält übrigens nur die 38 Datensätze und viel mehr werden aus auch nicht (maximal vielleicht 50). Auf jeden Fall schon mal vielen, vielen Dank Thomas "Tony Mountifield" <tony (AT) mountifield (DOT) org> schrieb im Newsbeitrag news:j8ebes$n4o$1 (AT) softins (DOT) clara.co.uk... In article <j8e8d5$4j5$1 (AT) online (DOT) de>, Thomas Gehrmann <webmaster (AT) arbeitszeitberatung (DOT) de> wrote: Hallo NG, ich habe folgendes Problem: Ich möchte eine Tabelle Abfragen und muss das Ergebnis in einer Weise sortiert ausgeben, für die ich nicht weiß, wie ich den SQL-String aufbauen muss. Sagen wir der Einfachheit halber, die Tabelle hätte nur 2 Spalten. In der ersten steht ein Datum, in der zweiten ein Veranstaltungstyp. Hier ein Beispiel Datum | Typ 08.11.2011 | Veranstaltung A 18.11.2011 | Veranstaltung B 01.11.2011 | Veranstaltung A 10.11.2011 | Veranstaltung C 05.11.2011 | Veranstaltung B Veranstaltungen können also mehrfach auftauchen. Die zu erstellende Abfrage soll mir nun alle Datensätze wiedergeben und dabei so sortieren, dass die früheste Veranstaltung zuerst angezeigt wird, anschließend in zeitlich aufsteigender Folge alle weiteren gleichen Veranstaltungen. Danach kommt die nächste andere Veranstaltung, die zeitlich nach dem ersten Termin liegt und dann wiederum alle gleichen Veranstaltungen in aufsteigender Reihenfolge und so weiter. Das ist etwas kompliziert zu beschreiben. Darum hier das gewünschte Abfrageergebnis für die obige Tabelle: Datum | Typ 01.11.2011 | Veranstaltung A 08.11.2011 | Veranstaltung A 05.11.2011 | Veranstaltung B 18.11.2011 | Veranstaltung B 10.11.2011 | Veranstaltung C Die früheste Veranstaltung ist die Veranstaltung A am 01.11.2011; anschließend werden in aufsteigender Reihefolge alle anderen Veranstaltungen des Typs A aufgeführt. Die nächste Veranstaltung nach dem 01.11.2011, die nicht Typ A ist, ist die Veranstaltung B am 05.11.2011. Sie wird darum als nächstes aufgeführt, wiederum gefolgt von allen anderen Veranstaltungen des gleichen Typs in zeitlich aufsteigender Reihenfolge etc. Im Ergebnis sollen die Veranstaltungen also nach Typen in Blöcken zusammengefasst werden, wobei die Reihefolge der Blöcke von der Chronologie der jeweils ersten Termine der Blöcke abhängt. Vielleicht fällt einem von euch eine ganz einfache Lösung für so eine Sortierung ein? Thomas, Leider is mein Deutsch nicht gut genug zu erzählen. Versuche diese: SELECT Datum,Tabelle.Typ FROM (SELECT MIN(Datum) AS Mindatum, Typ FROM Tabelle GROUP BY Typ) AS t INNER JOIN Tabelle ON Tabelle.Typ=t.Typ ORDER BY Mindatum,Datum; Wenn die Tabelle gross ist, brauchst Du eine Index auf Typ. MfG, Tony -- Tony Mountifield Work: tony (AT) softins (DOT) co.uk - http://www.softins.co.uk Play: tony (AT) mountifield (DOT) org - http://tony.mountifield.org |
#7
| |||
| |||
|
|
Hi Thomas, Ich glaube, dass die zweite Antwort nicht so sparsam ist, weil es eine SELECT für jede Reihe machen muss (ORDER BY). Wenn die Tabelle gross wird, läuft es vielleicht langsam. Vielleicht ist der MySQL-Server verwirrt wegen der zwei "webdb" Tabellen. Bitte versuche auch diese Query: strSQL = "SELECT * FROM (SELECT MIN(Datum1) AS Mindatum, Titel FROM webdb GROUP BY Titel) AS t INNER JOIN webdb w2 ON w2.Titel=t.Titel ORDER BY Mindatum,w2.Datum1" Ich habe "w2" eingefügt, um deutlich zu sein. Wenn dass nicht korrekt läuft, bin ich da überfragt! MfG, Tony In article <j8eg20$aiq$1 (AT) online (DOT) de>, Thomas Gehrmann <webmaster (AT) arbeitszeitberatung (DOT) de> wrote: Hallo noch einmal, Tony, ich hatte das Problem auch in einer anderen Newsgroup gepostet. Dort habe ich jetzt eine Antwort bekommen, die deiner sehr ähnlich ist, bei der aber wirklich alle Daten korrekt sortiert werden. Der String sieht dann so aus: strSQL = "SELECT * FROM webdb ta ORDER BY (SELECT MIN(datum1) FROM webdb tb WHERE tb.titel = ta.titel GROUP BY tb.titel), ta.titel, ta.datum1" und so das Ergebnis: http://www.arbeitszeitberatung.de/04...gen/test2.aspx Ich verstehe ehrlich gesagt nicht wirklich, was da genau den Unterschied ausmacht, bin aber auf jeden Fall froh, jetzt die perfekte Lösung zu haben. Also ganz herzlichen Dank noch einmal. Viele Grüße Thomas "Thomas Gehrmann" <webmaster (AT) arbeitszeitberatung (DOT) de> schrieb im Newsbeitrag news:j8eeqn$9ih$1 (AT) online (DOT) de... Hi Tony, mag sein, dass dein deutsch nicht perfekt ist, deine Lösung hingegen kommt dem schon sehr nahe :-) Hab ganz herzlichen Dank. So sieht das Ergebnis dann mit den echten Daten aus, um die es geht: http://www.arbeitszeitberatung.de/04...ngen/test.aspx Das ist wirklich nahezu perfekt. Aber es gibt seltsamerweise zwei Veranstaltungen, die sich nicht an die Sortierung halten, nämlich Tages-Seminar Optimierung der Abläufe im OP 07.05.2012, Hannover und Tages-Seminar Vertrauensarbeitszeit - Gestaltungsperspektiven und Umsetzung 14.11.2012, Berlin Diese beiden Veranstaltungen müssten weiter unten einsortiert werden. Ich kann mir irgendwie nicht erklären, warum es bei denen nicht klappt, bei allen anderen aber schon. Schau mal, so sieht jetzt der echte SQL-String aus. Fällt dir daran vielleichte etwas auf, woran es liegen könnte: strSQL = "SELECT * FROM (SELECT MIN(Datum1) AS Mindatum, Titel FROM webdb GROUP BY Titel) AS t INNER JOIN webdb ON webdb.Titel=t.Titel ORDER BY Mindatum,Datum1" Die Tabelle enthält übrigens nur die 38 Datensätze und viel mehr werden aus auch nicht (maximal vielleicht 50). Auf jeden Fall schon mal vielen, vielen Dank Thomas "Tony Mountifield" <tony (AT) mountifield (DOT) org> schrieb im Newsbeitrag news:j8ebes$n4o$1 (AT) softins (DOT) clara.co.uk... In article <j8e8d5$4j5$1 (AT) online (DOT) de>, Thomas Gehrmann <webmaster (AT) arbeitszeitberatung (DOT) de> wrote: Hallo NG, ich habe folgendes Problem: Ich möchte eine Tabelle Abfragen und muss das Ergebnis in einer Weise sortiert ausgeben, für die ich nicht weiß, wie ich den SQL-String aufbauen muss. Sagen wir der Einfachheit halber, die Tabelle hätte nur 2 Spalten. In der ersten steht ein Datum, in der zweiten ein Veranstaltungstyp. Hier ein Beispiel Datum | Typ 08.11.2011 | Veranstaltung A 18.11.2011 | Veranstaltung B 01.11.2011 | Veranstaltung A 10.11.2011 | Veranstaltung C 05.11.2011 | Veranstaltung B Veranstaltungen können also mehrfach auftauchen. Die zu erstellende Abfrage soll mir nun alle Datensätze wiedergeben und dabei so sortieren, dass die früheste Veranstaltung zuerst angezeigt wird, anschließend in zeitlich aufsteigender Folge alle weiteren gleichen Veranstaltungen. Danach kommt die nächste andere Veranstaltung, die zeitlich nach dem ersten Termin liegt und dann wiederum alle gleichen Veranstaltungen in aufsteigender Reihenfolge und so weiter. Das ist etwas kompliziert zu beschreiben. Darum hier das gewünschte Abfrageergebnis für die obige Tabelle: Datum | Typ 01.11.2011 | Veranstaltung A 08.11.2011 | Veranstaltung A 05.11.2011 | Veranstaltung B 18.11.2011 | Veranstaltung B 10.11.2011 | Veranstaltung C Die früheste Veranstaltung ist die Veranstaltung A am 01.11.2011; anschließend werden in aufsteigender Reihefolge alle anderen Veranstaltungen des Typs A aufgeführt. Die nächste Veranstaltung nach dem 01.11.2011, die nicht Typ A ist, ist die Veranstaltung B am 05.11.2011. Sie wird darum als nächstes aufgeführt, wiederum gefolgt von allen anderen Veranstaltungen des gleichen Typs in zeitlich aufsteigender Reihenfolge etc. Im Ergebnis sollen die Veranstaltungen also nach Typen in Blöcken zusammengefasst werden, wobei die Reihefolge der Blöcke von der Chronologie der jeweils ersten Termine der Blöcke abhängt. Vielleicht fällt einem von euch eine ganz einfache Lösung für so eine Sortierung ein? Thomas, Leider is mein Deutsch nicht gut genug zu erzählen. Versuche diese: SELECT Datum,Tabelle.Typ FROM (SELECT MIN(Datum) AS Mindatum, Typ FROM Tabelle GROUP BY Typ) AS t INNER JOIN Tabelle ON Tabelle.Typ=t.Typ ORDER BY Mindatum,Datum; Wenn die Tabelle gross ist, brauchst Du eine Index auf Typ. MfG, Tony -- Tony Mountifield Work: tony (AT) softins (DOT) co.uk - http://www.softins.co.uk Play: tony (AT) mountifield (DOT) org - http://tony.mountifield.org -- Tony Mountifield Work: tony (AT) softins (DOT) co.uk - http://www.softins.co.uk Play: tony (AT) mountifield (DOT) org - http://tony.mountifield.org |
![]() |
| Thread Tools | |
| Display Modes | |
| |