У меня есть следующий DDL, который пытается реализовать шаблон Temporal Property
CREATE TABLE IF NOT EXISTS `docs` (
`id` int(6) NOT NULL,
`effective_on` DATE NOT NULL,
`name` varchar(200) NOT NULL,
`value` varchar(200) NOT NULL,
`superceded_by` int(6),
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
create unique index zzz on `docs` (id);
alter table `docs` add FOREIGN KEY (superceded_by) REFERENCES docs(id) ON DELETE CASCADE;
CREATE UNIQUE INDEX xyz ON `docs` (name, effective_on, superceded_by);
и соответствующий запрос
select `value` from docs
where
superceded_by is null and name = 'p1' and
effective_on = (
select max(effective_on) from docs
where
superceded_by is null
and effective_on <= '2017-01-01'
and name = 'p1' )
http://sqlfiddle.com/#!9/a07c84/1
В текущем SQL-запросе используется подзапрос, который меня интересовал, можно ли его исключить или еще больше упростить запрос для повышения производительности.