Как условно оставить записи объединений в одной таблице, которые попадают между двумя периодами дат в другой таблице? - PullRequest
0 голосов
/ 27 февраля 2020

В настоящее время у меня есть следующие две таблицы:

Обратите внимание, что я использую SQLite.

Первая таблица называется url_table - она ​​имеет уникальный идентификатор, start_time, end_time и ссылку.

Мне известно, что столбцы для start_time и end_time имеют значение TEXT и что для того, чтобы решение работало, мне нужно было бы преобразовать данные в формат даты , но я пока не уверен, как это сделать.

CREATE TABLE "url_table" (
    "ID"    TEXT,
    "start_time"    TEXT,
    "end_time"  TEXT, 
  "reference" TEXT
);

INSERT INTO "url_table" ("ID", "start_time", "end_time", "reference")
values("abcd","2019-10-10 17:00", "2019-10-10 17:10","boy");

INSERT INTO "url_table" ("ID", "start_time", "end_time", "reference")
values("efgh","2019-11-10 18:00", "2019-11-10 18:10","girl");

Вторая таблица вызывает_table

Эта таблица содержит поля; Идентификатор уникален, start_time, которое должно быть датой, но это TEXT и ссылка

CREATE TABLE "calling_table" (
    "c_ID"  TEXT,
    "start_time"    TEXT,
  "reference" TEXT
);

INSERT INTO "calling_table" ("c_ID", "start_time", "reference")
values("agfhfghd","2019-10-10 17:05","boy");

INSERT INTO "calling_table" ("c_ID", "start_time", "reference")
values("fghfghfghrty","2019-11-10 18:05","girl");

У меня такой вопрос:

Я хотел бы оставить присоединяющую_прибыльную таблицу к url_table общей колонкой " ссылка "- но я бы хотел оставить соединение таким образом, чтобы я присоединялся там, где запись start_time для call_table находится между start_time и end_time url_table.

Так, например - первая и вторая запись call_table обе имеют начальное время, которое попадает в первые две записи url_table - поэтому эта информация будет присоединена к url_table.

Я не уверен, как это сделать с левым соединением.

Любая помощь приветствуется

Я думаю, что столбцы start_time и end_time должны быть датами для выполнения этого - однако я не знаю, как это сделать в SQLITE, поэтому оставил их как TEXT

sql скрипка здесь

Ожидаемый результат следующий:

ID    | start_time | end_time | reference | c_ID | call.start_time | call.reference 
------------------------------------------------------------------------------------
abcd  2019-10-10 17:00 2019-10-10 17:00 "boy" "agfhfghd","2019-10-10 17:05","boy"

1 Ответ

1 голос
/ 27 февраля 2020

Я думаю, логика c, которую вы хотите:

select . . .   -- list the columns you want here
from calling_table ct left join
     url_table ut
     on ct.reference = ut.reference and
        ct.start_time >= ut.start_time and
        ct.start_time < ut.end_time;

Здесь - это SQL скрипка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...