WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   SQL Group By Problem (http://www.wcm.at/forum/showthread.php?t=96513)

Summoner 10.05.2003 19:28

SQL Group By Problem
 
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!

sagi 10.05.2003 19:42

Versuch ein ORDER BY fuer den Artikel, dann einen fuer das Datum und dann ein LIMIT damit nur 1 Artikel angezeigt wird.

mfg

c.

delphirocks 10.05.2003 20:00

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

sagi 10.05.2003 20:03

@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.

delphirocks 10.05.2003 20:10

sorry, schlimmer ist, dass sie falsch ist :(

Summoner 10.05.2003 22:10

hö?
 
@sagi: bitte schreib mir doch das ganze select-statement auf. hab LIMIT ehrlich gesagt noch nicht verwendet...

@delphirocks: ja, leider falsch :) gibt ja dann wohl nur den artikel mit dem größten datum aus...

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

sagi 10.05.2003 23:12

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.

jonix 10.05.2003 23:42

ohne gewaehr!
 
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

siehe http://www.mysql.com/doc/en/example-...group-row.html


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag