【发布时间】:2018-03-22 03:25:22
【问题描述】:
我知道“如何加入最新记录”的问题被问了很多,但是,这个问题超出了我的知识范围。我通常使用“加入最大日期子查询,然后加入具有匹配 id 和时间的行”的方法来解决问题,并且我可以在子查询的 where 子句中添加额外的条件,但是这种风格在这个中不起作用情况。
我正在寻找第一个表中所有记录的历史记录,并在第一个表的记录时间之前加入第二个表的最新记录。
例子:
CREATE TABLE `A` (
`id` int(11) NOT NULL,
`a_time` timestamp NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `A` (`id`, `a_time`) VALUES
(1, '2018-03-21 04:30:00'),
(2, '2018-03-21 05:30:00'),
(3, '2018-03-21 07:30:00'),
(4, '2018-03-21 12:30:00');
CREATE TABLE `B` (
`id` int(11) NOT NULL,
`b_time` timestamp NOT NULL,
`some_text` varchar(128) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `B` (`id`, `b_time`, `some_text`) VALUES
(1, '2018-03-21 05:30:00', 'Foo'),
(2, '2018-03-21 09:30:00', 'Bar');
ALTER TABLE `A`
ADD PRIMARY KEY (`id`);
ALTER TABLE `B`
ADD PRIMARY KEY (`id`);
我希望的是来自 A 的 id 和时间,以及来自 B 的最新 (
a.id a.a_time b.some_text
------------------------------------
1 2018-03-21 04:30:00 null
2 2018-03-21 05:30:00 Foo
3 2018-03-21 07:30:00 Foo
4 2018-03-21 12:30:00 Bar
有人可以帮我解决这个问题吗?谢谢!
【问题讨论】:
-
看到 OP 的最大努力总是很高兴
-
看来唯一的选择是相关子查询。这句话让我害怕,因为它的效率。