在最近的日期时间左联接表,而不重复值

时间:2019-02-21 23:28:22

标签: mysql left-join

我正在尝试将table_atable_b的最近/最接近的datetime字段(date_adate_b)加入到一起,但我想确保我不会为每个连接的行从table_b接收重复的值。如果date_b中可用的table_b行用在了更近的table_a值上,则合并的行应仅保留为空白。

另一种表达方式:table_b中的datetime值只能使用一次,并且只能用于table_a中的绝对最接近/最近的值。

以下是table_a的示例:

| entry_a |              date_a |
|---------|---------------------|
|       1 | 2019-02-20 01:05:00 |
|       2 | 2019-02-20 01:10:00 |
|       3 | 2019-02-21 01:15:00 |
|       4 | 2019-02-22 01:20:00 |
|       5 | 2019-02-23 01:25:00 |
|       6 | 2019-02-24 01:30:00 |
|       7 | 2019-02-25 01:35:00 |
|       8 | 2019-02-26 01:40:00 |
|       9 | 2019-02-27 01:45:00 |
|      10 | 2019-02-28 01:50:00 |

这里是table_b

| entry_b |              date_b |       filename |
|---------|---------------------|----------------|
|       1 | 2019-02-20 01:03:00 | 20190220010300 |
|       2 | 2019-02-20 01:07:00 | 20190220010700 |
|       3 | 2019-02-23 01:23:00 | 20190223012300 |
|       4 | 2019-02-24 01:26:00 | 20190224012600 |
|       5 | 2019-02-25 01:30:00 | 20190225013000 |
|       6 | 2019-02-26 01:34:00 | 20190226013400 |
|       7 | 2019-02-27 01:40:00 | 20190227014000 |
|       8 | 2019-02-28 01:50:00 | 20190228015000 |
|       9 | 2019-02-28 01:51:00 | 20190228015100 |

这是预期的结果:

| entry_a |              date_a | entry_b |              date_b |       filename |
|---------|---------------------|---------|---------------------|----------------|
|       1 | 2019-02-20 01:05:00 |       1 | 2019-02-20 01:03:00 | 20190220010300 |
|       2 | 2019-02-20 01:10:00 |       2 | 2019-02-20 01:07:00 | 20190220010700 |
|       3 | 2019-02-21 01:15:00 |  (null) |              (null) |         (null) |
|       4 | 2019-02-22 01:20:00 |       3 | 2019-02-23 01:23:00 | 20190223012300 |
|       5 | 2019-02-23 01:25:00 |       4 | 2019-02-24 01:26:00 | 20190224012600 |
|       6 | 2019-02-24 01:30:00 |       5 | 2019-02-25 01:30:00 | 20190225013000 |
|       7 | 2019-02-25 01:35:00 |       6 | 2019-02-26 01:34:00 | 20190226013400 |
|       8 | 2019-02-26 01:40:00 |       7 | 2019-02-27 01:40:00 | 20190227014000 |
|       9 | 2019-02-27 01:45:00 |       8 | 2019-02-28 01:50:00 | 20190228015000 |
|      10 | 2019-02-28 01:50:00 |       9 | 2019-02-28 01:51:00 | 20190228015100 |

在期望的结果中要特别注意的一件事:最后两行显示date_b.8date_a.10完全匹配... 但是如果date_b.8和允许date_a.9匹配,然后date_b.9date_a.10也可以匹配相当接近的对象。 (我知道,如果这是不可能的并发症,那不是很关键。更重要的是result_table的2-4行所示的情况。)

我正在使用MySQL 5.6。我在这里建立了一个SQL提琴,并加载了表格: DEMO

非常感谢大家的帮助以及多年来为我提供的许多答案。

0 个答案:

没有答案