mysql是否从列表中选择每个ip的最新连接日期?

lf3rwulv  于 2021-06-23  发布在  Mysql
关注(0)|答案(3)|浏览(304)

我有一个数据库,保存每个登录到我的服务器根据用户ip

2018-08-07 00:00:00, 10.1.1.1

2018-08-06 07:00:00, 10.1.1.1

2018-08-05 00:22:00, 10.1.1.1

2018-08-07 00:00:00, 10.1.1.5

2018-08-05 00:00:00, 10.1.1.5

等等。。。。。
我想知道每个ip的最新连接是什么时候,所以最后我看到:

2018-08-07 00:00:00, 10.1.1.5

2018-08-07 00:00:00, 10.1.1.1

我试过这个:

SELECT IP,Time
FROM sample.connection
WHERE Time in (SELECT MAX(Time) from sample.connection GROUP BY IP);

但它不工作-我没有看到所有ip的最新连接(只有其中一些)
我的ip是varcahr(45)
时间就是日期时间
怎么了?

pbpqsu0x

pbpqsu0x1#

http://sqlfiddle.com/#!9/8楼E51/1

SELECT sc.IP, sc.Time
FROM sample.connection sc
LEFT JOIN sample.connection t
ON sc.ip = t.ip
   AND sc.time<t.time
WHERE t.ip IS NULL;
du7egjpx

du7egjpx2#

我一定错过了什么。为什么这不是一个简单的max和group-by选择?

SELECT IP, MAX(Time) as Time FROM conn GROUP BY IP;
sshcrbum

sshcrbum3#

尝试下面的查询,您需要一个子查询和联接:

SELECT sc.IP,sc.Time
FROM sample.connection sc
INNER JOIN
    (SELECT IP, MAX(Time) AS lstTime 
     FROM sample.connection 
     GROUP BY IP) t2 ON sc.Time = t2.lstTime AND sc.IP = t2.IP

http://sqlfiddle.com/#!9/8楼E51/2

IP          Time
--------------------------------
10.1.1.1    2018-08-07 00:00:00
10.1.1.5    2018-08-07 00:00:00

相关问题