WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 10.05.2003, 19:28   #1
Summoner
Senior Member
 
Registriert seit: 15.06.2002
Alter: 43
Beiträge: 102


Summoner eine Nachricht über ICQ schicken
Standard 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!
Summoner ist offline   Mit Zitat antworten
Alt 10.05.2003, 19:42   #2
sagi
Elite
 
Registriert seit: 08.11.2001
Alter: 42
Beiträge: 1.285


Standard

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.
sagi ist offline   Mit Zitat antworten
Alt 10.05.2003, 20:00   #3
delphirocks
bitte Mailadresse prüfen!
 
Registriert seit: 17.03.2002
Beiträge: 198


Standard

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
delphirocks ist offline   Mit Zitat antworten
Alt 10.05.2003, 20:03   #4
sagi
Elite
 
Registriert seit: 08.11.2001
Alter: 42
Beiträge: 1.285


Standard

@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.
sagi ist offline   Mit Zitat antworten
Alt 10.05.2003, 20:10   #5
delphirocks
bitte Mailadresse prüfen!
 
Registriert seit: 17.03.2002
Beiträge: 198


Standard

sorry, schlimmer ist, dass sie falsch ist
delphirocks ist offline   Mit Zitat antworten
Alt 10.05.2003, 22:10   #6
Summoner
Senior Member
 
Registriert seit: 15.06.2002
Alter: 43
Beiträge: 102


Summoner eine Nachricht über ICQ schicken
Standard 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
Summoner ist offline   Mit Zitat antworten
Alt 10.05.2003, 23:12   #7
sagi
Elite
 
Registriert seit: 08.11.2001
Alter: 42
Beiträge: 1.285


Standard

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.
sagi ist offline   Mit Zitat antworten
Alt 10.05.2003, 23:42   #8
jonix
Veteran
 
Registriert seit: 03.08.2000
Alter: 47
Beiträge: 461


Standard 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
____________________________________
hampel.at
jonix ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:37 Uhr.


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