![]() |
|
|
#1 |
|
Erfahrener Benutzer
Registriert seit: 05.09.2006
Ort: Würselen
Beiträge: 246
|
Hey Leute,
da ich gelesen hab, dass ja auch ein paar weitere Informatiker unter euch weilen stell ich einfach mal ne Frage nach ner Query, die ich mit meiner bisherigen ERfahrung leider noch nicht erstellen kann Aaaalso ... ich habe folgende Tabelle: Code:
---------------------------------------- | id | name | gueltig_ab | preis | ---------------------------------------- | 1 | nr 1 | 01.01.07 | 10 | ---------------------------------------- | 2 | nr 2 | 02.01.07 | 12 | ---------------------------------------- | 3 | nr 3 | 01.01.07 | 10 | ---------------------------------------- | 4 | nr 1 | 23.04.07 | 20 | ---------------------------------------- name ist jetzt in dem beispiel eindeutig (in wirklichkeit ist das ein primärschlüssel einer anderen tabelle, tut hier ja aber nichts zur sache) ich hab schon ne lösung mit einer oder zwei (weiß ich grad nicht) inneren abfragen, aber die ist extrem lang und umständlich, aber es muss ja irgendwie besser gehen. ich denke, dass ich nicht drauf komme, liegt an meiner fehlenden erfahrung bezüglich group by und den aggregatfunktionen und jetzt leute, haut rein ich hab jetzt schon stundenlang rumgegrübelt, mir fällt aber nix ein ... danke schon mal |
|
|
|
|
|
#2 |
|
Gast
Beiträge: n/a
|
hmm ... musst nen bisl probiern aber ich geb ma hier nen paar denkanstöße wies funktionieren könnte.
Evtl. unterstützt date die max funktion. Einfach wäre beispielsweise Code:
SELECT * FROM Tabelle WHERE name = (SELECT name FROM Tabelle WHERE gueltig_ab = (SELECT MAX(gueltig_ab) FROM Tabelle) coolere lösung auf die schnelle wüsst ich auch nich. ich denke du wirst es nicht mit einem nicht-verschalteltem statement hinbekommen. |
|
|
|
#3 |
|
Administrator
Registriert seit: 15.05.2002
Ort: Hamburg
Alter: 43
Beiträge: 9.038
Baujahr: 1994
Kilometer: 45000
|
@jussen: wenn du schon verschachtelst dann kannste auch einfach in der inneren nen order by datum DESC limit 0,1 machen ...
__________________
When I get sad, I stop being sad and be awesome again. True story. |
|
|
|
|
|
#4 | |
|
Erfahrener Benutzer
Registriert seit: 05.09.2006
Ort: Würselen
Beiträge: 246
|
Zitat:
Du stellst als Bedingung, dass der name = dem namen ist, dessen gueltig ab genauso groß wie das größte gueltig ab der tabelle ist. das heißt, du bekommst den ersten und den letzten datensatz zurück, da dort der name nr 1 ist, welcher an der vierten stelle den größten wert bei gueltig ab hat. ich hab jetzt meine lösung mal auf die beispieltabelle übertragen und schon sieht sie gar nicht mehr sooooo kompliziert aus. Code:
SELECT * FROM tbl_test as t1 WHERE gueltig_ab = (SELECT max(gueltig_ab) FROM tbl_test as t2 WHERE t2.name = t1.name) und da das innere SELECT ja für jede spalte einzeln nochmal ausgeführt wird, wird das bei ca 2000 datensätzen in einer, 5000 in der zweiten und (nur) 10 in der dritten bei nem 6-fach-join schon relativ umfangreich wenn jemand ne idee hat, wie ich das ohne dieseS (hier unproblematischen, in meinem fall aber relativ ungünstigen) innere SELECT lösen kann: her damit Danke EDIT: erm ... ist das order by und limit denn schneller als ein max (in meinem fall jetzt) ? |
|
|
|
|
![]() |
| Lesezeichen |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| mal ne frage | creech | Fahrwerk | 0 | 08.11.2007 13:37:00 |
| frage zu GS 500 E (GM 51 B) | Allgemeines | 26 | 11.09.2006 19:35:48 | |
| TÜV frage... | ady | Vergaser - Kraftstoff - Drosseln - Tuning | 22 | 05.09.2006 23:04:34 |
| LCD Frage!!! | Ollek | Elektrik, Elektronik und Beleuchtung | 16 | 28.06.2006 21:27:30 |
| Mal ne Frage... | Allgemeines | 1 | 27.03.2003 13:52:59 | |