Ik ben bezig een portefuille beheer script te schrijven om de koersen van mijn aandelen bij te houden. Mijn php script haalt met een cronjob iedere zoveel tijd via finance.yahoo.com de laatste koersen binnen. Aangezien ik ook het koersverloop van verschillende aandelen wil zien heb ik ervoor gekozen om 2 tabellen te maken. In de tabel "stocks" zet ik de globale info van het aandeel, zoals de naam,
het symbool, de aankoopprijs etc. In de tabel "stock_quotes" komen de huidige koersen die ik van yahoo.com haal. De structuur van de tabellen is hieronder te vinden.
stocks
stock_quotes
Het meeste van de functionaliteit werkt prima, de koersen worden goed van yahoo.com gehaald en ik kan aandelen kopen en verkopen. Ik loop echter tegen een probleem aan bij mijn aandelen overzicht. Ik wil een overzicht weergeven van de aandelen die ik heb. In dit overzicht komt de naam, aankoop datum, en het rendement (huidige koers - aankoop koers). Nu wilde ik een join gebruiken om dit voor elkaar te krijgen. De tabel "stocks" moet gejoined worden met de laatste koers uit de stock_quotes tabel. Dat is dus de rij met de grootste timestamp. Ik heb het geprobeerd met de volgende query.
Het resultaat:
De de grootste datum wordt inderdaad uit de tabel gehaald, maar voor de koers neemt MySQL gewoon de waarde van de eerste rij. Hoe is het mogelijk om op de grootste datum te selecteren, zodat ook de bijbehorende koers uit de tabellen gehaald worden?
Alvast bedankt voor de moeite.
het symbool, de aankoopprijs etc. In de tabel "stock_quotes" komen de huidige koersen die ik van yahoo.com haal. De structuur van de tabellen is hieronder te vinden.
stocks
code:
1
2
3
4
5
6
| +------+-----------+--------+---------+--------+--------+---------+------------+--------+---------+ | s_id | name | symbol | type | manual | number | b_price | b_date | s_date | s_price | +------+-----------+--------+---------+--------+--------+---------+------------+--------+---------+ | 4 | Hagemeyer | HGM.AS | aandeel | 0 | 500 | 3.07 | 1138908226 | 0 | 0 | +------+-----------+--------+---------+--------+--------+---------+------------+--------+---------+ 1 row in set (0.00 sec) |
stock_quotes
code:
1
2
3
4
5
6
7
| +----+------+-------+----------+------+------+------+------------+ | id | s_id | trade | volume | high | low | open | date | +----+------+-------+----------+------+------+------+------------+ | 2 | 4 | 4.15 | 10394468 | 4.18 | 4.12 | 4.12 | 1144420320 | | 6 | 4 | 4.3 | 0 | 0 | 0 | 0 | 1144430320 | +----+------+-------+----------+------+------+------+------------+ 2 rows in set (0.00 sec) |
Het meeste van de functionaliteit werkt prima, de koersen worden goed van yahoo.com gehaald en ik kan aandelen kopen en verkopen. Ik loop echter tegen een probleem aan bij mijn aandelen overzicht. Ik wil een overzicht weergeven van de aandelen die ik heb. In dit overzicht komt de naam, aankoop datum, en het rendement (huidige koers - aankoop koers). Nu wilde ik een join gebruiken om dit voor elkaar te krijgen. De tabel "stocks" moet gejoined worden met de laatste koers uit de stock_quotes tabel. Dat is dus de rij met de grootste timestamp. Ik heb het geprobeerd met de volgende query.
code:
1
2
3
4
5
6
| SELECT stocks.s_id, stocks.name, stocks.number, stocks.b_date, stocks.b_price, stock_quotes.trade, MAX( stock_quotes.date ) AS date FROM stocks LEFT JOIN stock_quotes ON stocks.s_id = stock_quotes.s_id WHERE stocks.s_date =0 GROUP BY stocks.s_id |
Het resultaat:
code:
1
2
3
4
5
6
| +------+-----------+--------+------------+---------+-------+------------+ | s_id | name | number | b_date | b_price | trade | date | +------+-----------+--------+------------+---------+-------+------------+ | 4 | Hagemeyer | 500 | 1138908226 | 3.07 | 4.15 | 1144430320 | +------+-----------+--------+------------+---------+-------+------------+ 1 row in set (0.00 sec) |
De de grootste datum wordt inderdaad uit de tabel gehaald, maar voor de koers neemt MySQL gewoon de waarde van de eerste rij. Hoe is het mogelijk om op de grootste datum te selecteren, zodat ook de bijbehorende koers uit de tabellen gehaald worden?
Alvast bedankt voor de moeite.