如何使上一个和下一个日期与表2中每个id的日期一致?

t9aqgxwy  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(385)

我试图在每个有事件的日期(来自表1)之前和之后获取第一个时间戳(在表2中)。有时是前后几秒钟,有时是几小时或几天。
我的table看起来像:

|-------|------------------|-------------|
|    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|
|----------|------------------|---------------------|------------------|

任何帮助都将不胜感激。我的table当然比这个大得多。
这就是我一直在玩的东西,但没有成功:

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
q35jwt9p

q35jwt9p1#

您当前的问题可能是您给这两个表都加了别名 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

相关问题