![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Senior Member
![]() |
![]() Also ich denke für einen echten SQL-Pro ist das sicher ein lächerliches Problem...:
Die Tabelle sieht Preis sieht so aus: Preis_ID / Preis / Datum / FK_Artikel 1 / 10 / 1.1.2003 / 1 2 / 11 / 2.1.2003 / 1 3 / 15 / 6.1.2003 / 1 4 / 34 / 2.1.2003 / 2 5 / 35 / 7.1.2003 / 2 ... usw Jetzt möchte ich gerne den aktuellsten Preis für jeden Artikel haben: Das geht einfach mit SELECT Preis, Max(Datum) FROM Preis GROUP BY FK_Artikel dachte ich. Geht natürlich nicht... er sagt, dass Preis dann kein Teil einer Aggregat-funktion ist. Aber Ich WILL nicht nach dem Preis gruppiern. Ich will halt einfach nur nach dem Artikel gruppieren (immer nur den Preis pro Artikel, der am aktuellsten ist) Wenn ich dann doch noch Preis in die Group-By-Klausel nehm bekomm ich plötzlich alle Preise für einen Artikel und nicht mehr nur den atkuellsten... Bin schon völlig verzweifelt, bitte helft mir einer in meiner Unwissenheit! |
![]() |
![]() |
![]() |
#2 |
Elite
![]() Registriert seit: 08.11.2001
Alter: 42
Beiträge: 1.285
|
![]() Versuch ein ORDER BY fuer den Artikel, dann einen fuer das Datum und dann ein LIMIT damit nur 1 Artikel angezeigt wird.
mfg c.
____________________________________
www.sagmueller.net Freedom - use it or lose it (Lawrence Lessig) Im übrigen bin ich der Meinung, dass Microsoft zerschlagen werden muss. |
![]() |
![]() |
![]() |
#3 |
bitte Mailadresse prüfen!
Registriert seit: 17.03.2002
Beiträge: 198
|
![]() hallo,
versuch's mit select preis_id,preis,artikel,datum from tabpreis where datum in (select max(datum) from tabpreis group by artikel) g dr |
![]() |
![]() |
![]() |
#4 |
Elite
![]() Registriert seit: 08.11.2001
Alter: 42
Beiträge: 1.285
|
![]() @delphirocks
ich denke, dass durch die zweite SQL Abfrage ein wenig Overhead ensteht, der nicht noetig ist. (Allerdings habe ich keine Benchmarks, die das belegen ![]() c.
____________________________________
www.sagmueller.net Freedom - use it or lose it (Lawrence Lessig) Im übrigen bin ich der Meinung, dass Microsoft zerschlagen werden muss. |
![]() |
![]() |
![]() |
#5 |
bitte Mailadresse prüfen!
Registriert seit: 17.03.2002
Beiträge: 198
|
![]() sorry, schlimmer ist, dass sie falsch ist
![]() |
![]() |
![]() |
![]() |
#6 |
Senior Member
![]() |
![]() @sagi: bitte schreib mir doch das ganze select-statement auf. hab LIMIT ehrlich gesagt noch nicht verwendet...
@delphirocks: ja, leider falsch ![]() Aber das kann doch nicht sein, dass es dafür keine Löstung gibt... das ist ja kein so unwahrscheinliches problem. dass man über das group-by dann noch zusätzliche infos braucht |
![]() |
![]() |
![]() |
#7 |
Elite
![]() Registriert seit: 08.11.2001
Alter: 42
Beiträge: 1.285
|
![]() Ein Blick in die Dokumentation wird helfen:
http://www.mysql.com/documentation/m...e.html#IDX1367 http://www.wisenut.com bringt sicherlich noch andere Dokus. mfg c.
____________________________________
www.sagmueller.net Freedom - use it or lose it (Lawrence Lessig) Im übrigen bin ich der Meinung, dass Microsoft zerschlagen werden muss. |
![]() |
![]() |
![]() |
#8 |
Veteran
![]() Registriert seit: 03.08.2000
Alter: 47
Beiträge: 461
|
![]() wenns denn wirklich nur ein sql-statement sein soll:
Code:
SELECT FK_Artikel, SUBSTRING( MAX( CONCAT( LPAD( Datum, 6, '0' ) , Preis ) ) , 7 ) AS Preis, LEFT( MAX( CONCAT( LPAD( Datum, 10, '0' ) , Preis ) ) , 10 ) AS Datum FROM preis GROUP BY FK_Artikel
____________________________________
hampel.at |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|