Имеется несколько таблиц (несущественные поля не показываю)
Таблица 1 (договора):
CREATE TABLE `db_agreement` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`fio_agreementer` varchar(40) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251
Таблица 2 (услуги):
CREATE TABLE `db_service` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`use_begin` date NOT NULL DEFAULT '0000-00-00',
`use_end` date NOT NULL DEFAULT '0000-00-00',
`id_service_name` int(11) unsigned DEFAULT NULL,
`id_agreement` int(11) unsigned NOT NULL DEFAULT '0',
`id_service_prev` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `id_agreement` (`id_agreement`),
KEY `use_end` (`use_end`),
KEY `use_begin` (`use_begin`),
KEY `id_service_prev` (`id_service_prev`),
KEY `combo` (`id_agreement`,`use_begin`,`use_end`),
KEY `combo2` (`use_begin`,`use_end`),
KEY `combo3` (`use_begin`,`use_end`,`id_service_name`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251
Таблица 3 (наименование услуг):
CREATE TABLE `db_service_name` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ID` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251
Связи между таблицами и полями следующие:
db_service.id_agreement ---> db_agreement.id
db_service.id_service_name ---> db_service_name.id
db_service.id_service_prev ---> db_service.id (ID предыдущей услуги)
Требуется помощь в составлении выборки, причем по каждому договору необходимо выбрать ТОЛЬКО последнюю услугу (с максимальным db_service.id, причем дата окончания db_service.use_end должна быть или '0000-00-00' или разница между NOW() и db_service.use_end не более 90 дней). Выборку к тому же необходимо производить по условию db_service_name.id = определенное значение (будет задаваться скриптом на PHP)....
Одновременно на договоре может быть активной только 1 услуга.. Если производится смена услуги, то предыдущей услуге ставится дата закрытия и новой услуге устанавливается значение поля db_service.id_service_prev, равное db_service.id предыдущей услуги. "Подводные камни" - на договоре могут быть одинаковые услуги в разное время.. но активная - только одна.
Выбирать необходимо след. поля:
db_agreement.id
db_service.id
db_service.use_begin
db_service.use_end
db_service_name.name
Надеюсь, что сформулировал не очень сумбурно. Заранее благодарю за готовый запрос или указание куда "копать"