如何将一个表中的最新行连接到另一个表MYSQL

时间:2015-06-03 06:18:52

标签: mysql sql join greatest-n-per-group

我有2张桌子

首先是

地址
ID广告的日期时间
1 121.252.212.121 2015-04-20 08:23:04
2 121.252.212.122 2015-05-20 09:11:06
3 121.252.212.121 2015-05-20 11:56:04
4 121.252.212.123 2015-05-20 09:54:25
5 121.252.212.123 2015-05-20 10:23:04
6 121.252.212.122 2015-05-20 09:50:10
7 121.252.212.123 2015-05-20 12:50:02

第二是

监测
server_id广告标签
1 121.252.212.121北 2 121.252.212.122南 3 121.252.212.123东

我使用此查询

SELECT monitor.label,addresses.datetime 从监视器 INNER JOIN地址 ON monitor.ad = addresses.ad ORDER BY monitor.label;

MyOutput中

标签日期时间
北2015-04-20 08:23:04
北2015-05-20 11:56:04
南2015-05-20 09:11:06
南2015-05-20 09:50:10
东2015-05-20 09:54:25
东2015-05-20 10:23:04
东2015-05-20 12:50:02

但我的愿望输出是获取最近的行并合并重复的标签 以下示例

MYDESIRE
标签日期时间
北2015-05-20 11:56:04
南2015-05-20 09:50:10
东2015-05-20 12:50:02

任何人都可以帮我解决这个问题吗?

注意*地址AD不是主要的或唯一的       但监控AD是主要的

3 个答案:

答案 0 :(得分:2)

这称为mysql group-wise maximum,有许多方法可以做到这一点,其中一种方法是

select 
m.label, 
a.datetime from monitor m 
join ( 
 select ad, max(datetime) as datetime from addresses group by ad
)a on a.ad = m.ad;

答案 1 :(得分:0)

只需使用group bymax

SELECT monitor.label, max(addresses.datetime) 
FROM monitor INNER JOIN addresses ON monitor.ad=addresses.ad 
group by monitor.label 
ORDER BY monitor.label;

答案 2 :(得分:0)

使用GROUP BY条款。

SELECT label, MAX(datetime)
FROM monitor INNER JOIN addresses
ON monitor.ad = addresses.ad
GROUP BY label