mysql-queries voor gevorderden
Ik zit met een aantal lastige queries. Ik zal maar met de eerste beginnen:
DB-structuur:
player_organisations
-org_id
-naam
-...
player_koersen
-org_id
-datum
-last_value
-difference
in de organisations-tabel staan 132 bedrijven met hun naam en een id. Dit aantal veranderd in principe niet, dus elk bedrijf staat er uiteraard maar 1 keer in. In player_koersen staan de waarden van een aandeel van een bedrijf, dit wordt elk kwartier geüpdate. Dus voor elk bedrijf staan er meerdere records in. Nu wil ik weten wat de top 5 van stijgers is. Dit probeer ik met de volgende querie:
Code (php)
1
2
3
4
5
2
3
4
5
SELECT player_organisations.naam,player_koersen.last_value,player_koersen.difference
FROM player_organisations INNER JOIN player_koersen
ON player_organisations.org_id = player_koersen.org_id
WHERE player_organisations.naam <> 'AEX-index'
ORDER BY player_koersen.difference ASC LIMIT 5
FROM player_organisations INNER JOIN player_koersen
ON player_organisations.org_id = player_koersen.org_id
WHERE player_organisations.naam <> 'AEX-index'
ORDER BY player_koersen.difference ASC LIMIT 5
Dit gaat fout, omdat er geordend wordt op difference, dus de hoogste stijgers zijn 5x hetzelfde bedrijf, omdat het veld 'difference' de 5 hoogste waarden heeft in de tabel player_koersen. Hoe kan ik dit oplossen? er MOET gewoon een oplossing zijn, ik voel het....
Alvast bedankt
Gewijzigd op 01/01/1970 01:00:00 door Simon Blok
mySQL Group By?
Die kant moet je denk ik gaan zoeken :)
GHeb helaas geen tijd om een kan en klaar oplossnig te maken maar dit zou voldoende moeten zijn :)
de oplossing:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
SELECT player_organisations.naam,player_koersen.last_value,player_koersen.difference
FROM player_organisations INNER JOIN player_koersen
ON player_organisations.org_id = player_koersen.org_id
WHERE player_organisations.naam <> 'AEX-index'
GROUP BY player_organisations.naam
ORDER BY player_koersen.difference DESC LIMIT 5
FROM player_organisations INNER JOIN player_koersen
ON player_organisations.org_id = player_koersen.org_id
WHERE player_organisations.naam <> 'AEX-index'
GROUP BY player_organisations.naam
ORDER BY player_koersen.difference DESC LIMIT 5
DISTINCT werkt uiteraard niet, omdat de waarden van de koersen wel anders zijn per record.
zoals ik al zei, druk druk druk. Gelukkig is het druk met php dus kan ik over dit zoort dingen wel ff snel brainstormen
Is het mogelijk om uit de tabel player_koersen de gegevens eruit te halen voor bijvoorbeeld 2x per uur, dus zoiets als:
SELECT waarde FROM tabel WHERE datum 2x per uur.
Verder, om er voor te zorgen dat je niet volgende week bij de Media Markt staat voor een nieuw toetsenbord, kijk eens naar aliassen:
Code (php)
1
2
3
2
3
SELECT player_organisations.naam, player_koersen.last_value
FROM FROM player_organisations, player_koersen
WHERE player_organisations.org_id = player_koersen.org_id
FROM FROM player_organisations, player_koersen
WHERE player_organisations.org_id = player_koersen.org_id
Code (php)
1
2
3
2
3
SELECT po.naam, pk.last_value
FROM FROM player_organisations po, player_koersen pk
WHERE po.org_id = pk.org_id
FROM FROM player_organisations po, player_koersen pk
WHERE po.org_id = pk.org_id
Elwin
Dan za je met GROUP BY en HAving aan de gang moetem.
ik wil een lijstje van 4 waarden van koersen van een bepaald bedrijf. in de database staan meer dan 4 waarden per uur. Is het mogelijk om in 1 querie een lijstje op te vragen van deze vier waarden met een interval van ongeveer een kwartier?
Gewijzigd op 01/01/1970 01:00:00 door Simon Blok