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:
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
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
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
DISTINCT werkt uiteraard niet, omdat de waarden van de koersen wel anders zijn per record.
Die laatste snap ik niet helemaal? Bedoel je dat je maar twee keer per uur die gegevens wilt ophalen? Zo ja, ga dan aan een cronjob denken.
Verder, om er voor te zorgen dat je niet volgende week bij de Media Markt staat voor een nieuw toetsenbord, kijk eens naar aliassen:
SELECT player_organisations.naam, player_koersen.last_value
FROM FROM player_organisations, player_koersen
WHERE player_organisations.org_id = player_koersen.org_id
Dit kan véél korter:
SELECT po.naam, pk.last_value
FROM FROM player_organisations po, player_koersen pk
WHERE po.org_id = pk.org_id
Nu valt het niet zo op, maar als je een stuk of 20 kolommen uit een stuk of vijf tabellen moet halen ben je allang blij dat er aliassen zijn.
Ik neem aan dat je bedoelt dat een waarde in het laatste uur 2 X voorkomt?
Dan za je met GROUP BY en HAving aan de gang moetem.
[code]
SELECT
ding
FROM tabel
WHERE (hier je conditie)
GROUP BY ding
HAVING COUNT(ding) = 2
sorry...zal het even wat beter uitleggen:
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?