webForumDet fria alternativet

Får inte till en gruppering

Databaser & SQL

10 svar · 233 visningar · startad av Gein

Medlem sedan sep. 20005 700 inlägg
Frågan#1

Jag har en tabell med 4 fält. admin, fund, rate och ratedate.
De första två är strängar, rate är en float och ratedate är ett datum.

Nu vill jag hämta ut fälten, men den ska bara ta de fält där ratedate är störst (eller senaste datumet om så vill) för varje (admin, fund). Alltså, admin och fund måste grupperas på något sätt? För dom hör ihop.
Mitt försök ser ut såhär:

SELECT * FROM funds_gein GROUP BY admin, fund ORDER BY ratedate desc

Men det fungerar inte som det ska. Den gör som den ska med den enda skillnaden att den verkar ta det första datumet istället för det senaste.
Nån som begriper mitt problem?

r/ Problemet verkar vara att den grupperar innan den kör ORDER. Då är det ju logiskt att det blir som det blir, eftersom det äldsta datumen ligger överst.. men hur göra?

Medlem sedan dec. 200012 464 inlägg
#2
select * from funds_gein fg
where ratedate = (
select max(ratedate) from funds_gein
 where fund = fg.fund
 and admin = fg.admin)
Medlem sedan sep. 20005 700 inlägg
#3

LarsG skrev:

select * from funds_gein fg
where ratedate = (
select max(ratedate) from funds_gein
 where fund = fg.fund
 and admin = fg.admin)

You have an error in your SQL syntax near 'select max(ratedate) from funds_gein where fund = fg.fund and admin = fg.admin)' at line 1
Jag kör mySQL om det har någon betydelse.

Medlem sedan sep. 20005 700 inlägg
#4

Går det verkligen göra en select-sats som bygger på en annan select-sats? Funkar inte i detta fall iaf. Går det att lösa på annat sätt kanske?

Medlem sedan dec. 200012 464 inlägg
#5

Det går med alla databaser utom Mysql.

I Mysql får man dela upp det i flera steg, det finns en beskrivning i manualen som du borde hitta om du tittar igenom innehållsförteckningen. Den heter ungefär getting the piecewise maximum. Eller så får du vänta påå nästa version av Mysql.

Medlem sedan sep. 20005 700 inlägg
#6

Ajdå, det va synd :x
Får väl försöka hitta det i manualen då, fast fick ingen träff alls på piecewise.

Medlem sedan dec. 200012 464 inlägg
#7

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

Groupwise, annars så var det rätt.

Medlem sedan sep. 20005 700 inlägg
#8

Tack ska du ha! :D

Medlem sedan sep. 20005 700 inlägg
#9

Märker att jag fortfarande har problem. Nu tar den ut det senaste datumet, fast tillsammans med den äldsta kursen (rate). Även fast dom alltså inte hör ihop

T.ex
select admin, fund, rate, max(ratedate) from funds_gein GROUP BY admin, fund
ger mej

admin	fund		rate	max(ratedate)
Banco	Banco Alleman	320,78	2003-06-14
Nordea	Alfa		365,15	2003-06-14
osv.

fast Banco - Banco Alleman hade kursen (rate) 316,48 datumet 2003-06-14 enligt databasen.

Medlem sedan dec. 200012 464 inlägg
#10

Det går inte att använda group by för detta. Att din sql-sats överhuvudtaget blir godkänd beror på ett fel i Mysql. Vilket värde du får på rate är slumpmässigt.

Medlem sedan sep. 20005 700 inlägg
#11

Jag förstår, hur som helst löste jag hela problemet på ett helt annat sätt. Tänk om och tänk bättre brukar ofta funka ;) Tack iaf!

287 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
148 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
147 ms — ändringar (db)