¿Cómo seleccionar registros de las últimas 24 horas usando SQL?

185

¿Estoy buscando una wherecláusula que pueda usarse para recuperar registros de las últimas 24 horas?

Miguel
fuente
1
¿Tiene un campo de marca de tiempo en estos registros?
Shawn Steward

Respuestas:

101
SELECT * 
FROM table_name
WHERE table_name.the_date > DATE_SUB(CURDATE(), INTERVAL 1 DAY)
Guillaume Flandre
fuente
66
Si los registros se almacenan como DATETIME, esto seleccionará todos los registros de la fecha anterior, sin tener en cuenta la parte de tiempo. Ejecutado en 23:59:59, la consulta devolverá todos los registros de las últimas 48horas, no 24.
Quassnoi
18
Si desea seleccionar las últimas 24 horas de un campo de fecha y hora, sustituya 'curate ()' con 'now ()'. Esto también incluye el tiempo.
Haentz
564

En MySQL:

SELECT  *
FROM    mytable
WHERE   record_date >= NOW() - INTERVAL 1 DAY

En SQL Server:

SELECT  *
FROM    mytable
WHERE   record_date >= DATEADD(day, -1, GETDATE())

En Oracle:

SELECT  *
FROM    mytable
WHERE   record_date >= SYSDATE - 1

En PostgreSQL:

SELECT  *
FROM    mytable
WHERE   record_date >= NOW() - '1 day'::INTERVAL

En Redshift:

SELECT  *
FROM    mytable
WHERE   record_date >= GETDATE() - '1 day'::INTERVAL

En SQLite:

SELECT  *
FROM    mytable
WHERE   record_date >= datetime('now','-1 day')

En MS Access:

SELECT  *
FROM    mytable
WHERE   record_date >= (Now - 1)
Quassnoi
fuente
3
Intento la consulta para mysql pero si son las 2AM, por ejemplo, obtengo los registros de 00 a 02 AM. Dos horas solo en lugar de 24. ¿Alguna idea?
Manos
Me gusta mucho la solución provista aquí, solo lo que noté en MySQL es que el rendimiento de la solución Guillaume Flandre fue más rápido.
oneworld
1
En Amazon Redshift, entiendo function getdate() does not exist. Lo reemplazó current_datey funcionó bien.
FloatingRock
1
Esta respuesta me hace desear que hubiera un botón de "estrella", ya que quiero marcar esto.
Brian Risk
1
@Manos En MySQL, parece CURDATE()que no devuelve una fecha con una porción de tiempo, por lo que continúa 00. Lo arreglé usando en NOW()lugar de CURDATE().
4castle
21

MySQL:

SELECT * 
FROM table_name
WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 24 HOUR)

El INTERVALO puede ser en AÑO, MES, DÍA, HORA, MINUTO, SEGUNDO

Por ejemplo, en los últimos 10 minutos

SELECT * 
FROM table_name
WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 10 MINUTE)
Karthik Jayapal
fuente
3
Esta es la respuesta que mejor responde a la pregunta específica: Cómo devolver las 24 HORAS PRECEDENTES (del momento presente), en lugar de las 24 anteriores (lo que sugiere todos los resultados del día anterior). Esto respondió a mis requisitos, esto recibe mi voto positivo. EDITAR: Vale la pena mencionar que la columna table_name.the_date debería ser una marca de tiempo.
Anthony Cregan
8

Qué SQL no se especificó, SQL 2005/2008

SELECT yourfields from yourTable WHERE yourfieldWithDate > dateadd(dd,-1,getdate())

Si está utilizando los tipos de fecha de mayor precisión de 2008, use la nueva función sysdatetime () en su lugar, igualmente si usa las horas UTC, cambie internamente a las llamadas UTC.

Andrés
fuente
7

en postgres, suponiendo que su tipo de campo es una marca de tiempo:

seleccione * de la tabla donde date_field> (now () - intervalo '24 horas ');

pisaruk
fuente
4

Si la marca de tiempo considerada es una marca de tiempo UNIX, primero debe convertir la marca de tiempo UNIX (por ejemplo, 1462567865) a la marca de tiempo o datos de mysql

SELECT * FROM `orders` WHERE FROM_UNIXTIME(order_ts) > DATE_SUB(CURDATE(), INTERVAL 1 DAY)
encender
fuente
Eso supone que el motor que se está utilizando es MySQL ya que FROM_UNIXTIME () es una función de MySQL. Para uso de SQL Server: SELECT DATEDIFF(s, '1970-01-01 00:00:00', DateField) si necesita una precisión de milisegundos en SQL Server 2016 y uso posterior: SELECT DATEDIFF_BIG(millisecond, '1970-01-01 00:00:00', DateField)
luisdev
3
select ...
from ...
where YourDateColumn >= getdate()-1
Mladen Prajdic
fuente
2

Hola, ya pasé mucho tiempo desde la publicación original, pero tuve un problema similar y quiero compartirlo.

Tengo un campo de fecha y hora con este formato AAAA-MM-DD hh: mm: ss, y quiero acceder a todo un día, así que aquí está mi solución.

La función DATE (), en MySQL: Extrae la parte de fecha de una expresión de fecha o fecha y hora.

SELECT * FROM `your_table` WHERE DATE(`your_datatime_field`)='2017-10-09'

con esto consigo todo el registro de la fila en este día.

Espero que sea de ayuda para cualquiera.

Rafa cosquiere
fuente
Este es el único que funcionó para mí en mySQL. Por alguna razón cuando probé SELECT * FROM myTable WHERE myDate> DATE_SUB ('2018-06-13 00:00:00', INTERVALO 24 HORAS); Todavía estaba obteniendo registros del 14/06/2018.
jDub9
1
SELECT * 
FROM tableName 
WHERE datecolumn >= dateadd(hour,-24,getdate())
Galés
fuente
1

En SQL Server (durante las últimas 24 horas):

SELECT  *
FROM    mytable
WHERE   order_date > DateAdd(DAY, -1, GETDATE()) and order_date<=GETDATE()
arunkumar.halder
fuente
2
¿por qué necesitaría agregar "y order_date <= GETDATE ()" cuando ya está buscando las últimas 24 horas desde el momento de la ejecución de esa consulta? Realmente no tiene sentido tener esa parte en la cláusula where cuando ya tienes "GETDATE" mencionado en la primera. Es mejor que lo hagas "order_date> = DateAdd (DAY, -1, GETDATE ())" ¡eso es todo!
KMX