Я просмотрел все и еще не нашел разумного способа справиться с этим, хотя я уверен, что один возможен:
Одна таблица исторических данных содержит квартальную информацию:
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 2009-07-14 1 3,5 ??
1002 2009-07-15 1 3.4 &&
1003 2009-07-14 2 2.3 ^^
тогда мы бы хотели ?? Поле qtr_ID, которому будет присвоено значение «102» в качестве самого последнего квартала для этого источника данных на эту дату, и && также будет «102», а ^^ будет «104».
Проблемы заключаются в том, что обе таблицы (в частности, дневная таблица) на самом деле очень большие, их нельзя нормализовать, чтобы избавиться от повторяющихся дат, или иным образом оптимизировать, а для определенных ежедневных записей нет предшествующей квартальной записи.
Я пробовал различные объединения, используя datediff (где задача состоит в том, чтобы найти минимальное значение datediff больше нуля) и другие попытки, но у меня ничего не работает - обычно мой синтаксис где-то нарушается. Любые идеи приветствуются - я выполню любые основные идеи или концепции и сообщу.