2010-08-03 20 views
5

Estoy tratando de obtener los registros de todos los que son 2 horas o más de edad que utilizan esta consultaMySQL INTERVALO minutos

$minutes = 60 * 2 

SELECT COUNT(id) AS TOTAL, job_id 
    from tlb_stats 
WHERE log_time >= DATE_SUB(CURRENT_DATE, INTERVAL $minutes MINUTE) 
GROUP BY job_id 

Sólo selecciona los registros recientes y se salta la edad. Cuando cambio log_time < = solo selecciona los antiguos y los saltos que son nuevos.

¿Qué estoy haciendo mal?

+0

Estás hacer las cosas bien; eso es lo que debería hacer esta consulta. – zerkms

+0

¿por qué no está seleccionando los registros anteriores? – Maximus

+0

@ jason4: porque quiere los registros con un tiempo _less o igual_ ('<=') a la hora actual menos 2 minutos, (es decir, ahora: 22:06, hace 2 minutos es 22:04, así que quiere un registro con 22:03, que es menos de 22:04). – Wrikken

Respuesta

11

Trate

$minutes = 60 * 2 

SELECT COUNT(`id`) AS `TOTAL`, `job_id` 
    FROM `tlb_stats` 
    WHERE `log_time` < DATE_SUB(NOW(), INTERVAL $minutes MINUTE) 
    GROUP BY `job_id` 
  • acentos abiertos de uso para citar campos (palabras como "total" y "id" puede significar un día algo en MySQL)
  • uso NOW() para CURRENT_DATE sólo significa 2010- 08-04, sin incluir el tiempo
  • use < para obtener entradas anterior que esa fecha.
+0

Perfecto, parece que funciona :) Gracias – Maximus

0

SELECT * FROM table_name DONDE CURTIME()> = (colname + INTERVALO DE 120 MINUTOS)

aquí, nombrecol es la columna en la que agregó marca de tiempo en el momento en que se creó el registro

+1

Recomienda reorganizar la expresión a 'WHERE colname <= ...' para que se pueda usar 'INDEX (... colname)'. –

Cuestiones relacionadas