232 votes

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

Je suis à la recherche d'une clause where qui peut être utilisée pour récupérer les enregistrements des dernières 24 heures?

2 votes

Avez-vous un champ horodatage sur ces enregistrements ?

702voto

Quassnoi Points 191041

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 votes

Je teste la requête pour MySQL mais s'il est 2h du matin, par exemple, j'obtiens les enregistrements de 00 à 02 heures du matin. Seulement deux heures au lieu de 24. Des idées ?

0 votes

J'aime beaucoup la solution fournie ici, juste ce que j'ai remarqué dans MySQL est que la performance de la solution Guillaume Flandre était plus rapide.

1 votes

Dans Amazon Redshift, j'obtiens la fonction getdate() n'existe pas. Je l'ai remplacée par current_date et cela a fonctionné correctement.

107voto

Guillaume Flandre Points 4373
SELECT * 
FROM table_name
WHERE table_name.the_date > DATE_SUB(CURDATE(), INTERVAL 1 DAY)

11 votes

Si les enregistrements sont stockés en tant que DATETIME, cela sélectionnera tous les enregistrements de la date précédente, en ignorant la partie heure. Si exécutée à 23:59:59, la requête renverra tous les enregistrements des 48 dernières heures, et non des 24.

23 votes

Si vous souhaitez sélectionner les dernières 24 heures à partir d'un champ datetime, remplacez 'curate()' par 'now()'. Cela inclut également l'heure.

22voto

Karthik Jayapal Points 115

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 votes

Ceci est la réponse qui répond le mieux à la question spécifique: Comment retourner les 24 HEURES PRÉCÉDENTES (du moment présent), par opposition aux 24 heures précédentes (ce qui suggère tous les résultats de la journée précédente). Cela répond à mes besoins, cela mérite mon vote positif. MODIFICATION: Il est important de mentionner que la colonne table_name.the_date devrait être un timestamp.

8voto

Andrew Points 14278

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

SELECT voschamps de votreTable WHERE votrChampAvecDate > dateadd(dd,-1,getdate())

Si vous utilisez les types de date de précision accrue de 2008, utilisez la nouvelle fonction sysdatetime() à la place, de même si vous utilisez des temps UTC en interne, passez aux appels UTC.

7voto

pisaruk Points 483

Dans postgres, en supposant que votre type de champ est un TIMESTAMP :

sélectionnez * à partir de table où date_field > (maintenant() - interval '24 heures');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X