Mam dwie tabele stworzone według zapytań jak niżej.
W "events" zapisuję pewne zdarzenia powtarzalne w czasie wykonywane przez osoby z tabelki "persons". Każde zdarzenie ma jak widać dwa stany. Moje pytanie jest nastepujące:
Jak wydostać sName wszystkich osób, których ostatnim wykonanym zdarzeniem jest 'In'?
Próbowąłem pokombinowąć trochę, ale jedyne co mi wysżło to:
SELECT persons.sCode, persons.sName, events.iTimestamp
FROM events LEFT JOIN persons ON events.sCode = persons.sCode
WHERE sAction = 'In'
GROUP BY events.sCode
ORDER BY events.iTimestamp DESC
-- Wersja serwera: 4.0.22
-- Wersja php: 5.0.2
CREATE TABLE `events` (
`iID` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`sCode` varchar(12) NOT NULL DEFAULT '0',
`iTimestamp` int(11) NOT NULL DEFAULT '0',
`sAction` SET('In','Out') DEFAULT NULL,
PRIMARY KEY (`iID`)
) TYPE=MyISAM;
CREATE TABLE `persons` (
`iID` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`sCode` varchar(12) NOT NULL DEFAULT '0',
`sName` varchar(255) NOT NULL DEFAULT '',
`iBirthdate` int(11) NOT NULL DEFAULT '0',
`sAppointmentCode` varchar(12) NOT NULL DEFAULT '0',
`sAppointmentName` varchar(255) NOT NULL DEFAULT '',
`sPhoto` longblob NOT NULL,
PRIMARY KEY (`iID`)
) TYPE=MyISAM;