Comment sélectionner des enregistrements des dernières 24 heures en utilisant SQL?


185

Je recherche une whereclause qui peut être utilisée pour récupérer les enregistrements des dernières 24 heures?


1
Avez-vous un champ d'horodatage sur ces enregistrements?
Shawn Steward

Réponses:


101
SELECT * 
FROM table_name
WHERE table_name.the_date > DATE_SUB(CURDATE(), INTERVAL 1 DAY)

6
Si les enregistrements sont stockés en tant que DATETIME, cela sélectionnera tous les enregistrements de la date précédente, sans tenir compte de la partie de temps. A été exécutée à 23:59:59, la requête renverra tous les enregistrements des dernières 48heures, non 24.
Quassnoi

18
Si vous souhaitez sélectionner les dernières 24 heures dans un champ datetime, remplacez «curate ()» par «now ()». Cela comprend également le temps.
Haentz

564

Dans MySQL:

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

Dans SQL Server:

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

Dans Oracle:

SELECT  *
FROM    mytable
WHERE   record_date >= SYSDATE - 1

Dans PostgreSQL:

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

Dans Redshift:

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

Dans SQLite:

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

Dans MS Access:

SELECT  *
FROM    mytable
WHERE   record_date >= (Now - 1)

3
J'essaye la requête pour mysql mais si son 2AM, par exemple, j'obtiens les enregistrements de 00 - 02 AM. Deux heures seulement au lieu de 24. Des idées?
Manos

J'aime beaucoup la solution fournie ici, juste ce que j'ai noté dans MySQL est que les performances de la solution Guillaume Flandre étaient plus rapides.
oneworld

1
Dans Amazon Redshift, je reçois function getdate() does not exist. Remplacé par current_dateet cela a bien fonctionné.
FloatingRock

1
Cette réponse me fait souhaiter qu'il y ait un bouton "étoile" car je veux ajouter ceci à mes favoris.
Brian Risk

1
@Manos Dans MySQL, il semble CURDATE()ne pas renvoyer une date avec une portion d'heure, donc ça va à 00. Je l'ai corrigé en utilisant NOW()au lieu de CURDATE().
4castle

21

MySQL:

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

L'INTERVALLE peut être en ANNÉE, MOIS, JOUR, HEURE, MINUTE, SECONDE

Par exemple, dans les 10 dernières minutes

SELECT * 
FROM table_name
WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 10 MINUTE)

3
C'est la réponse qui répond le mieux à la question spécifique: Comment retourner les 24 HEURES PRÉCÉDENTES (à partir du moment présent), par opposition aux 24 précédentes (qui suggère tous les résultats de la veille). Cela a répondu à mes exigences, cela obtient mon vote favorable. EDIT: il vaut la peine de mentionner la colonne table_name.the_date doit être un horodatage.
Anthony Cregan

8

Quel SQL n'a pas été spécifié, SQL 2005/2008

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

Si vous êtes sur les types de date de précision augmentée 2008, utilisez plutôt la nouvelle fonction sysdatetime (), de la même manière si vous utilisez les heures UTC en interne pour les appels UTC.


7

dans postgres, en supposant que votre type de champ est un horodatage:

sélectionnez * dans la table où champ_date> (maintenant () - intervalle '24 heure ');


4

Si l'horodatage considéré est un horodatage UNIX Vous devez d'abord convertir l'horodatage UNIX (par exemple, 1462567865) en horodatage ou données mysql

SELECT * FROM `orders` WHERE FROM_UNIXTIME(order_ts) > DATE_SUB(CURDATE(), INTERVAL 1 DAY)

Cela suppose que le moteur utilisé est MySQL car FROM_UNIXTIME () est une fonction MySQL. Pour l'utilisation de SQL Server: SELECT DATEDIFF(s, '1970-01-01 00:00:00', DateField) Si vous avez besoin d'une précision à la milliseconde dans SQL Server 2016 et une utilisation ultérieure: SELECT DATEDIFF_BIG(millisecond, '1970-01-01 00:00:00', DateField)
luisdev


2

Bonjour, j'ai maintenant passé beaucoup de temps depuis le message d'origine, mais j'ai eu un problème similaire et je veux partager.

J'ai un champ datetime avec ce format AAAA-MM-JJ hh: mm: ss, et je veux accéder à une journée entière, voici donc ma solution.

La fonction DATE (), dans MySQL: extrait la partie date d'une expression date ou datetime.

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

avec cela, j'obtiens tout le registre de ligne en ce jour.

J'espère que cela aidera n'importe qui.


C'est le seul qui a fonctionné pour moi sur mySQL. Pour une raison quelconque, lorsque j'ai essayé SELECT * FROM myTable WHERE myDate> DATE_SUB ('2018-06-13 00:00:00', INTERVAL 24 HOUR); J'étais toujours en train d'obtenir des records du 2018-06-14.
jDub9

1
SELECT * 
FROM tableName 
WHERE datecolumn >= dateadd(hour,-24,getdate())

1

Dans SQL Server (pour les dernières 24 heures):

SELECT  *
FROM    mytable
WHERE   order_date > DateAdd(DAY, -1, GETDATE()) and order_date<=GETDATE()

2
pourquoi auriez-vous besoin d'ajouter "et order_date <= GETDATE ()" alors que vous recherchez déjà les dernières 24 heures au moment de l'exécution de cette requête? Cela n'a vraiment aucun sens d'avoir cette partie dans la clause where alors que "GETDATE" est déjà mentionné dans la première. Vous feriez mieux de le faire "order_date> = DateAdd (DAY, -1, GETDATE ())" c'est tout!
KMX
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.