У меня есть проблема с наибольшей группой, которую я пытаюсь решить. Я читал существующие решения, но, похоже, ни одно из них не соответствует причудам, с которыми я имею дело.
Сценарий. Допустим, есть нефтяная компания, у которой есть несколько нефтяных скважин. Каждая скважина имеет несколько нефтяных резервуаров. Каждый день кто-то считывает показания каждой скважины. Иногда они также снимают показания резервуаров, однако показания резервуаров проводятся гораздо реже и могут быть распределены в течение нескольких дней.
Все показания скважин и резервуаров записываются в базу данных, упорядоченную по дате.
CREATE TABLE "wellReadings" (
"id" INT PRIMARY AUTO_INCREMENT,
"date" DATETIME,
"wellName" VARCHAR(10),
...
);
CREATE TABLE "tankReadings" (
"id" INT PRIMARY AUTO_INCREMENT,
"date" DATETIME,
"well" INT NOT NULL,
"tankName" VARCHAR(10),
...
);
Проблема: Для любого заданного показания скважины (в таблице wellReadings) на любую дату я хочу найти показания резервуара (в таблице tankReadings) для всех резервуаров, связанных с этой скважиной, снятых на та самая дата. Если для конкретного резервуара нет показаний на эту дату, мне нужны самые последние показания до этой даты.
До сих пор я пытался использовать соединения и подзапросы, но не смог сузить результаты до самых последних показаний резервуара (мои тестовые запросы продолжают давать мне ВСЕ показания резервуаров, которые происходят на дату чтения скважины или до нее). ). Коррелированный подзапрос может работать, но моя БД их не поддерживает (SQLite).