Я просмотрел все и еще не нашел разумного способа справиться с этим, хотя я уверен, что это возможно:
В одной таблице исторических данных есть квартальная информация:
CREATE TABLE Quarterly (
unique_ID INT UNSIGNED NOT NULL,
date_posted DATE NOT NULL,
datasource TINYINT UNSIGNED NOT NULL,
data FLOAT NOT NULL,
PRIMARY KEY (unique_ID));
Другая таблица исторических данных (очень большая) содержит ежедневную информацию:
CREATE TABLE Daily (
unique_ID INT UNSIGNED NOT NULL,
date_posted DATE NOT NULL,
datasource TINYINT UNSIGNED NOT NULL,
data FLOAT NOT NULL,
qtr_ID INT UNSIGNED,
PRIMARY KEY (unique_ID));
Поле qtr_ID не является частью потока ежедневных данных, заполняющих базу данных. Вместо этого мне нужно задним числом заполнить поле qtr_ID в таблице Daily идентификатором строки Quarterly.unique_ID, используя самые последние квартальные данные за что Daily.date_posted для этого источника данных.
Например, если квартальные данные
101 2009-03-31 1 4.5
102 2009-06-30 1 4.4
103 2009-03-31 2 7.6
104 2009-06-30 2 7.7
105 2009-09-30 1 4.7
и ежедневные данные
1001 14.07.2009 1 3.5 ??
1002 15.07.2009 1 3.4 &&
1003 14.07.2009 2 2.3 ^^
тогда мы хотели бы ?? Полю qtr_ID будет присвоено значение «102» в качестве самого последнего квартала для этого источника данных на эту дату, и && также будет равно «102», а ^^ будет равно «104».
Проблемы заключаются в том, что обе таблицы (особенно ежедневная таблица) на самом деле очень большие, их нельзя нормализовать, чтобы избавиться от повторяющихся дат, или иным образом оптимизировать, а для некоторых ежедневных записей нет предыдущей квартальной записи.
Я пробовал различные объединения, используя datediff (где проблема заключается в том, чтобы найти минимальное значение datediff больше нуля) и другие попытки, но у меня ничего не работает - обычно мой синтаксис где-то ломается. Любые идеи приветствуются - я выполню любые основные идеи или концепции и отчитаюсь.