我有两个表,我希望根据最近的结束时间从first_table
输入列,从second_table
输出列
first_table:
id input
--------------
1 America
2 China
3 Russia
2 China
3 Russia
second_table
id output finished_time
-------------------------------------------------
1 Washington 10/5/2019 10:05:13 PM +00:00
2 Shanghai 10/6/2019 10:05:13 PM +00:00
3 Kazan 10/7/2019 10:05:13 PM +00:00
2 Beijing 10/10/2019 10:05:13 PM +00:00
3 Moscow 10/11/2019 10:05:13 PM +00:00
result_table
id input output
-----------------------------
1 America Washington
2 China Beijing
3 Russia Moscow
我正在尝试使用此查询:
SELECT input, second_table.output
FROM first_table
INNER JOIN second_table ON first_table.id = second_table.id
AND Max(finished_time)
答案 0 :(得分:1)
您可以在联接的utf8mb4_general_ci
子句中使用相关子查询:
COLLATE utf8_unicode_ci
为了提高性能,您需要在on
上建立索引。
这也可以用select
f.*,
s.output
from first_table f
inner join second_table s
on s.id = f.id
and s.finished_time = (
select max(s1.finished_time)
from second_table s1
where s1.id = s.id
)
条件表示:
second_table(id, finished_time)
最后,另一种选择是使用窗口函数进行排名
not exists
您可以试用各种解决方案,并选择一种您更了解或执行得更快的解决方案。
答案 1 :(得分:1)
您可以使用每个国家/地区最多可使用finished_time
的派生表,然后将其联接回国家和城市表:
SELECT t1.id, t1."input", t2."output"
FROM (SELECT DISTINCT id, "input"
FROM first_table) t1
JOIN second_table t2 ON t2.id = t1.id
JOIN (SELECT id, MAX(finished_time) AS max_time
FROM second_table t2
GROUP BY id) m ON m.id = t2.id AND m.max_time = t2.finished_time
ORDER BY t1.id
输出:
ID input output
1 America Washington
2 China Shanghai
3 Russia Kazan
请注意,我在SELECT DISTINCT
中添加了first_table
,因为您在该表中有重复的行,然后将在输出中导致重复的行。
答案 2 :(得分:0)
如果您的second_table.finished_time具有关联的索引,这也很有效
SELECT input , second_table.output
FROM first_table
INNER JOIN second_table ON first_table.id= second_table.id
ORDER BY second_table.finished_time DESC
limit 1;