2011-08-22 25 views
63

¿Cómo puedo visualizar y contar los valores cuyas fechas son ayer? Usé time() para insertar la fecha en la base de datos. Ejemplo:MySQL seleccionando la fecha de ayer

URL: google.com youtube.com google.com youtube.com test.com youtube.com 
DateVisited: 1313668492 1313668540 1313668571 13154314 

Quiero hacer pantalla el número de URL que tienen múltiples existían en la tabla y también cuántos de esa URL han sido visitados ayer. consecuencia ejemplo:

LINK  | timesExisted | timesVisitedYesterday 
Google.com |  2  | 2 
youtube.com|  3  | 3 

ya tengo la idea de conseguir la fecha de ayer, pero no tienen una idea de contar cuántas veces una URL ha existido durante ayer y contar cuántas veces una URL ha existido en el mesa.

Respuesta

110

La manera más simple y mejor para obtener la fecha de ayer es:

subdate(current_date, 1) 

Su consulta sería:

SELECT 
    url as LINK, 
    count(*) as timesExisted, 
    sum(DateVisited between UNIX_TIMESTAMP(subdate(current_date, 1)) and 
     UNIX_TIMESTAMP(current_date)) as timesVisitedYesterday 
FROM mytable 
GROUP BY 1 

Para los curiosos, la razón que sum(condition) le da el recuento de las filas que satisfacen la condición, que de lo contrario requeriría un engorroso y prolijoLa declaración, es que en mysql los valores booleanos son 1 para verdadero y 0 para falso, por lo que sumar una condición efectivamente cuenta cuántas veces es verdadero. El uso de este patrón puede mejorar tu código SQL.

10

Puede obtener la fecha de ayer mediante el uso de la expresión CAST(NOW() - INTERVAL 1 DAY AS DATE). Así que algo como esto podría funcionar:

SELECT * FROM your_table 

WHERE DateVisited >= UNIX_TIMESTAMP(CAST(NOW() - INTERVAL 1 DAY AS DATE)) 
    AND DateVisited <= UNIX_TIMESTAMP(CAST(NOW() AS DATE)); 
63
SELECT SUBDATE(NOW(),1); 

donde ahora() la función returs fecha y hora de sistema en la fecha y hora actual ...

puede utilizar:

SELECT SUBDATE(CURDATE(),1) 
+0

a mí me funcionó. Muchas gracias –

3

Me adaptado una de las respuestas anteriores de cdhowie ya que no pude hacer que funcionara. Esto parece funcionar para mí. Sospecho que también es posible hacer esto con la función UNIX_TIMESTAMP utilizada.

SELECT * FROM your_table 

WHERE UNIX_TIMESTAMP(DateVisited) >= UNIX_TIMESTAMP(CAST(NOW() - INTERVAL 1 DAY AS DATE)) 
    AND UNIX_TIMESTAMP(DateVisited) <= UNIX_TIMESTAMP(CAST(NOW() AS DATE)); 
+0

Tenía el mismo problema, esto funcionó para mí. – Chris

6

de consulta para las últimas semanas:

SELECT * 
FROM dual 
WHERE search_date BETWEEN SUBDATE(CURDATE(), 7) AND CURDATE() 
3

Mientras que la respuesta elegida es correcta y concisa, yo diría que la estructura observó en otras respuestas:

SELECT * FROM your_table 
WHERE UNIX_TIMESTAMP(DateVisited) >= UNIX_TIMESTAMP(CAST(NOW() - INTERVAL 1 DAY AS DATE)) 
    AND UNIX_TIMESTAMP(DateVisited) <= UNIX_TIMESTAMP(CAST(NOW() AS DATE)); 

Si solo necesita una fecha simple sin sello de tiempo, también podría escribirlo de la siguiente manera:

SELECT * FROM your_table 
WHERE DateVisited >= CAST(NOW() - INTERVAL 1 DAY AS DATE) 
    AND DateVisited <= CAST(NOW() AS DATE); 

La razón para usar CAST contra SUBDATE es CAST es la sintaxis ANSI SQL. SUBDATE es una implementación específica de MySQL del componente aritmético de fecha de CAST. Adquirir el hábito de usar la sintaxis ANSI puede reducir los dolores de cabeza si alguna vez tiene que migrar a una base de datos diferente.También es bueno tener el hábito como práctica profesional, ya que seguramente trabajará con otros SGBD en el futuro.

Ninguno de los principales sistemas DBMS cumple totalmente con ANSI, pero la mayoría implementan el amplio conjunto de sintaxis ANSI, mientras que casi ninguno fuera de MySQL y sus descendientes (MariaDB, Percona, etc.) implementará la sintaxis específica de MySQL .

+0

Buenas explicaciones sobre por qué uno elegiría uno sobre el otro. – Sablefoste

5

Se puede utilizar:

SELECT SUBDATE(NOW(), 1); 

o

SELECT SUBDATE(NOW(), INTERVAL 1 DAY); 

o

SELECT NOW() - INTERVAL 1 DAY; 

o

SELECT DATE_SUB(NOW(), INTERVAL 1 DAY); 
Cuestiones relacionadas