ik heb er weer eentje 
Hier de voorbeelddata:
Ik wil hebben: de laatste bezoekdata van de 3 personen.
Als ik nu de volgende query draai ...
... krijg ik niet het laatste bezoek van de personen.
(Zie de MAX(vi_date) die niet gelijk is aan vi_date.)
Dat komt doordat MySQL gewoon het eerste record
geeft en daarna pas de ORDER doet.
Het omdraaien van de tabelvolgorde werkt niet en
is ook geen oplossing, omdat we eigenlijk nog veel
meer joins hebben, maar die zijn even weggelaten
om het probleem duidelijk te maken...
Iemand een handig manier?
Hier de voorbeelddata:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| CREATE TABLE IF NOT EXISTS `person` ( `pe_id` int(11) NOT NULL auto_increment, `pe_name` varchar(100) NOT NULL default '', PRIMARY KEY (`pe_id`) ) TYPE=MyISAM; CREATE TABLE IF NOT EXISTS `visit` ( `vi_id` int(11) NOT NULL auto_increment, `vi_pe_id` int(11) NOT NULL default '0', `vi_date` date NOT NULL default '0000-00-00', PRIMARY KEY (`vi_id`), KEY `vi_pe_id` (`vi_pe_id`) ) TYPE=MyISAM; TRUNCATE person; TRUNCATE visit; INSERT INTO person (pe_id, pe_name) VALUES (1,'person 1'),(2,'person 2'),(3,'person 3'); INSERT INTO visit (vi_id,vi_pe_id,vi_date) VALUES (1,1,'2004-04-01'),(2,1,'2004-05-01'),(3,1,'2004-06-01'), (4,2,'2004-04-02'),(5,2,'2004-05-02'),(6,2,'2004-06-02'), (7,3,'2004-04-03'),(8,3,'2004-05-03'),(9,3,'2004-06-03'); |
Ik wil hebben: de laatste bezoekdata van de 3 personen.
Als ik nu de volgende query draai ...
code:
1
2
3
4
5
| SELECT *, MAX(vi_date) FROM person JOIN visit ON pe_id=vi_pe_id GROUP BY pe_id ORDER BY vi_date DESC; |
... krijg ik niet het laatste bezoek van de personen.
(Zie de MAX(vi_date) die niet gelijk is aan vi_date.)
Dat komt doordat MySQL gewoon het eerste record
geeft en daarna pas de ORDER doet.
Het omdraaien van de tabelvolgorde werkt niet en
is ook geen oplossing, omdat we eigenlijk nog veel
meer joins hebben, maar die zijn even weggelaten
om het probleem duidelijk te maken...
Iemand een handig manier?
[ Voor 9% gewijzigd door florisje op 06-07-2004 09:46 ]