【问题标题】:How can get the previous and next date in line with each ID's date in table_1 from table_2?如何从table_2中获取与table_1中每个ID的日期一致的上一个和下一个日期?
【发布时间】:2020-11-27 06:39:32
【问题描述】:

我正在尝试获取具有事件的每个日期(来自 table_1)之前和之后的第一个时间戳(在 table_2 中)。 有时是前后几秒钟,有时是几小时或几天。

我的 table_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  |
|-------|------------------|-------------|

Table_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 

【问题讨论】:

    标签: mysql sql datetime timestamp subquery


    【解决方案1】:

    您的直接问题可能是您在查询中为两个表 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-24
      • 2022-01-16
      • 2012-12-11
      • 2020-05-11
      • 1970-01-01
      • 1970-01-01
      • 2016-01-07
      • 1970-01-01
      相关资源
      最近更新 更多