Mysql 如何将一个表中最近的行连接到另一个表
我有两张桌子 首先是 地址 idaddatetime 1 121.252.212.1212015-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 二是 监视器 服务器id广告标签 1212.252.212.121北 2212.252.212.122南部 3 121.252.212.123东部 我使用这个查询 选择monitor.label、addresses.datetime 来自监视器 内部连接地址 在monitor.ad=addresses.ad上 按monitor.label订购 输出量 标签日期时间 北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 但我希望输出的是获取最近的行并合并重复标签 下面的例子 我的愿望 labeldatetime 北2015-05-20 11:56:04 南2015-05-20 09:50:10 东部2015-05-20 12:50:02 在这件事上有人能帮我吗 注意*地址广告不是主要的或唯一的 但是监视器AD是主要的只需使用group by和max: 使用GROUPBY子句 这就是所谓的,有很多方法可以做到这一点,其中一种方法是Mysql 如何将一个表中最近的行连接到另一个表,mysql,sql,join,greatest-n-per-group,Mysql,Sql,Join,Greatest N Per Group,我有两张桌子 首先是 地址 idaddatetime 1 121.252.212.1212015-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
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;
Max不保证在加入表时返回同一行。Abhik,幸运的是,op只需要两列。另一个问题是,我想查询当前日期和时间以及提前1小时的数据。今天的日期时间是2015年4月6日上午10点。我只想查询谁的日期时间在6月4日上午10点到上午11点之间/2015@CarlvicJapitanaLim尝试datetime介于now和DATE_ADDnow之间的位置,HOURHi先生,还有一个问题,如果我想在日期和时间内查询,比如,今天的时间是上午10点,我想查询上午10点到上午11点的当前日期,只需在内部查询中添加一个where子句,作为select ad,maxdatetime作为datetime,地址中的datetime介于concatcurdate,,'10:00:00'和concatcurdate,',“11:00:00”组由adHi先生抱歉,我指的是当前时间和提前1小时。例如,今天的datetime是2015年4月6日上午10点,我只想查询谁的datetime在2015年4月6日上午10点到上午11点之间,所以如果我在2015年4月6日下午3点再次检查,我只想查询谁的datetime在2015年4月6日下午3点到下午4点之间,您可以这样做datetime从现在到date\u addnow,间隔1小时先生,那么我的查询应该是这样的??从monitor_servers中选择m.label,a.datetime,从地址中选择m.join select ad,maxdatetime作为datetime,其中datetime介于now和date_addnow之间,间隔1小时由ada在a.ad上分组=m.ad
SELECT label, MAX(datetime)
FROM monitor INNER JOIN addresses
ON monitor.ad = addresses.ad
GROUP BY label
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;