ejemplo - datetime() mysql
seleccione de la tabla mysql entre datetime x min ago y datetime x min ago (2)
Para su primera consulta:
SELECT username
FROM online
WHERE time > NOW() - INTERVAL 15 MINUTE
Y para tu segundo:
SELECT username
FROM online
WHERE time BETWEEN NOW() - INTERVAL 60 MINUTE AND NOW() - INTERVAL 15 MINUTE
Ambas consultas asumen que cada usuario solo aparece una vez en la tabla en línea (y si este es el caso, debe agregar una restricción ÚNICA para hacer cumplir eso).
Si un nombre de usuario puede aparecer más de una vez en la tabla, solo necesita agregar DISTINCT después de SELECT para su primera consulta, pero necesita un enfoque ligeramente diferente para su segunda consulta:
SELECT DISTINCT username
FROM online
WHERE time > NOW() - INTERVAL 60 MINUTE
AND NOT EXISTS
(
SELECT *
FROM online
WHERE time > NOW() - INTERVAL 15 MINUTE
)
Creo que lo resumí muy bien en el título. Quiero seleccionar usuarios en línea de una hora específica a otra hora específica. Mi mesa se ve así:
CREATE TABLE online (
id bigint(20) NOT NULL auto_increment,
`username` varchar (16) NOT NULL,
`ip` varchar(39) NOT NULL default '''',
`time` datetime NOT NULL default ''0000-00-00 00:00:00'' ,
PRIMARY KEY (id)
);
Quiero una consulta que devuelva los username
de username
que han estado en línea durante los last 15 minutes
.
Y una consulta para los usuarios que han estado en línea los last 60 minutes, but not the last 15 minutes
. Así que la consulta no devuelve los mismos valores. Esto no sé cómo hacerlo.
Use DATE_SUB para restar el tiempo de la DATE_SUB devuelta de AHORA ():
últimos 15 minutos
SELECT o.*
FROM ONLINE o
WHERE o.time >= DATE_SUB(NOW(), INTERVAL 15 MINUTE)
últimos 60 minutos, pero no los últimos 15 minutos
SELECT o.*
FROM ONLINE o
WHERE o.time BETWEEN DATE_SUB(NOW(), INTERVAL 60 MINUTE)
AND DATE_SUB(NOW(), INTERVAL 15 MINUTE)
Costos de manejo duplicados extra.