Вам необходимо реализовать «Медленно меняющееся измерение».
В основном, в дополнение к «естественному» ключу, у вас также есть метки времени valid_from и valid_to.
Текущая строка всегда имеет значение «valid_to», равное «9999-12-31 23:59:59» или самое высокое значение даты / времени, которое вы можете обработать системой.
Первый ряд будет иметь: -
id valid_to valid_from description.
1 2009-12-25 9999-12-31 My best new toy.
При изменении описания вы не перезаписываете текущую строку
но добавьте полную новую строку и измените дату valid_to в старой строке следующим образом: -
id valid_to valid_from description.
1 2009-12-25 2009-06-22 My best new toy
1 2010-06-23 9999-12-31 A broken toy.
Затем вы можете использовать дату создания вашей строки Y для соответствующей строки X по этой дате.
Select * from x
join Y on x.id = y.id
and x.create-date >= valid_from
and x.create-date <= valid_to
Я рекомендую вам использовать временные метки, а не даты, но принцип легче проиллюстрировать с помощью дат.