ejemplos ejemplo date_sub create sql mysql datetime

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.