2010-09-09 10 views
23

Guardo un registro de los inicios de sesión en una tabla. Tengo columnas para identificación, ip, fecha y hora. De ese registro de inicios de sesión quiero buscar inicios de sesión hechos solo en la última hora.MySQL: obtención de filas agregadas la última hora

Estoy navegando a través de los documentos de MySQL en las funciones de fecha y hora, pero parece que no puedo combinarlos correctamente.

¿Alguien me puede ayudar?

+1

es que cuatro o tres columnas, y ¿cuál es el tipo de datos de la "fecha y hora"? –

+0

Se modificó ahora, solo una columna para la fecha y la hora, y su fecha y hora. –

Respuesta

79

Hacer uso de la DATE_SUB() y ahora() funciones:

select count(*) as cnt 
from log 
where date >= DATE_SUB(NOW(),INTERVAL 1 HOUR); 

espero que le ayuda a:)

+0

Sí, hice algo así, solo con TIMESUB (¿o SUBTIME?). Pero, ¿requiere esto que el campo de fecha sea de tipo de fecha y hora? –

+0

Sí, utilizando TIMESUB es más adecuado. sí, la primera expresión tiene que ser una expresión de fecha y hora. el segundo debe ser una expresión de tiempo. mira esto http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_subtime – SDReyes

+1

Guardando datos en UTC, es necesario usar UTC_TIMESTAMP() en lugar de AHORA () –

0

sin los detalles, creo DATE_ADD() .. funcionaría mediante la adición de su cláusula where un complemento de horas de hoy negativos

(o DATE_SUB())

2

Recomiendo tener una columna de fecha y hora en lugar de columnas de fecha y hora.

Suponga que tiene una columna de fecha y hora llamada last_login: la función()

SELECT id, ip_address, last_login 
FROM mytable 
WHERE last_login >= DATE_SUB(NOW(), interval 1 hour); 
+0

¿Qué sucede si se debe imprimir la fecha de un día en particular? No quiero buscar la fecha del día anterior, sino solo las fechas actuales. Me puedes ayudar con esto ? – Sap

0

se puede hacer fácilmente usando

select count(*) from logins where datetime>= NOW()- INTERVAL 1 HOUR 
0

También puede utilizar CURDATE

SELECT 
    count(*) AS TotalCount 
FROM 
    tblName 
WHERE 
    datetime >= DATE_SUB(CURDATE(), INTERVAL 1 HOUR) 
Cuestiones relacionadas