У меня есть БД, который сохраняет каждый логин на моем сервере в соответствии с 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)
Время в Datetime
что случилось?
Попробуйте выполнить запрос ниже, вам потребуется подзапрос и присоединиться:
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/8f1e51/2
IP Time
--------------------------------
10.1.1.1 2018-08-07 00:00:00
10.1.1.5 2018-08-07 00:00:00
Я должен что-то упустить. Почему это не простой SELECT с MAX и GROUP BY?
SELECT IP, MAX(Time) as Time FROM conn GROUP BY IP;
http://sqlfiddle.com/#!9/8f1e51/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;