Как можно получить предыдущую и следующую дату в соответствии с датой каждого идентификатора в table_1 из table_2? - PullRequest
0 голосов
/ 07 августа 2020

Я пытаюсь получить первую метку времени (в таблице_2), предшествующую и следующей за каждой датой (из таблицы_1), имеющей событие. Иногда это несколько секунд до и после, а иногда часы или дни.

Моя таблица_1 выглядит так:

|-------|------------------|-------------|
|    id |       date       |    events   |
|-------|------------------|-------------|
|     4 |2020-04-11 3:44:20|     call    |
|     2 |2020-04-21 7:59:06| appointment |
|     1 |2020-04-17 1:14:32| appointment |
|     3 |2020-04-10 3:41:17|   feedback  |
|-------|------------------|-------------|

Таблица_2 выглядит так:

|------------------|-------------|
|       date       |    events   |
|------------------|-------------|
|2020-04-13 3:07:13|   feedback  |
|------------------|-------------|
|2020-04-12 5:42:04|   feedback  |
|------------------|-------------|
|2020-04-18 2:52:11|     call    |
|------------------|-------------|
|2020-04-21 8:14:27| appointment |
|------------------|-------------|

А это это результат, который я ищу:

|----------|------------------|---------------------|------------------|
|    id    |       date       |   previous_date     |    next_date     |
|----------|------------------|---------------------|------------------|
|     4    |2020-04-11 3:44:20| 2020-04-12 5:42:04  |2020-04-12 5:42:04|
|----------|------------------|---------------------|------------------|
|     2    |2020-04-21 7:59:06| 2020-04-18 2:52:11  |2020-04-21 8:14:27|
|----------|------------------|---------------------|------------------|
|     1    |2020-04-17 1:14:32| 2020-04-13 3:07:13  |2020-04-18 2:52:11|
|----------|------------------|---------------------|------------------|
|     3    |2020-04-13 3:02:17| 2020-04-12 5:42:04  |2020-04-13 3:07:13|
|----------|------------------|---------------------|------------------|

Любая помощь будет принята с благодарностью. Мой стол, конечно, намного больше этого.

Это то, с чем я играю, но безуспешно:

SELECT
    t1.id,
    t1.date,
    (
     SELECT MIN(t1.date)
        FROM table_1 AS t1
        WHERE t1.date > t2.date
            AND t1.events = t2.events
    ) AS NextDate
    FROM table_2 t2 

1 Ответ

0 голосов
/ 07 августа 2020

Ваша непосредственная проблема, вероятно, заключается в том, что вы использовали псевдонимы для обеих таблиц t2 в своем запросе.

Тем не менее, похоже, что подзапросы справятся с этой задачей. Из ваших данных вы не хотите коррелировать по event, только по дате:

SELECT
    t1.id,
    t1.date,
    (
        SELECT MAX(t2.date)
        FROM table_2 AS t2
        WHERE t2.date < t1.date
    ) AS PreviousDate,
    (
        SELECT MIN(t2.date)
        FROM table_2 AS t2
        WHERE t2.date > t1.date
    ) AS NextDate
FROM table_1 t1
...