Come selezionare i record delle ultime 24 ore usando SQL?


185

Sto cercando una whereclausola che può essere utilizzata per recuperare i record nelle ultime 24 ore?


1
Hai un campo timestamp su questi record?
— Shawn Steward,

Risposte:


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

6
Se i record sono archiviati come DATETIME, verranno selezionati tutti i record dalla data precedente, ignorando la parte temporale. Stato eseguito 23:59:59, la query restituirà tutti i record per le ultime 48ore, no 24.
— Quassnoi,

18
Se si desidera selezionare le ultime 24 ore da un campo datetime, sostituire 'curate ()' con 'now ()'. Questo include anche il tempo.
— Haentz,

564

In MySQL:

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

In SQL Server:

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

In Oracle:

SELECT  *
FROM    mytable
WHERE   record_date >= SYSDATE - 1

In PostgreSQL:

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

In Redshift:

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

In SQLite:

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

In MS Access:

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

3
Provo la query per mysql ma se è la 2AM, per esempio, ottengo i record dalle 00 alle 02 AM. Solo due ore invece di 24. Qualche idea?
— Manos,

Mi piace molto la soluzione fornita qui, proprio quello che ho notato in MySQL è che le prestazioni della soluzione Guillaume Flandre sono state più veloci.
— oneworld,

1
In Amazon Redshift, ottengo function getdate() does not exist. Sostituito con current_datee ha funzionato bene.
— FloatingRock,

1
Questa risposta mi fa desiderare che ci sia un pulsante "a stella" mentre voglio aggiungere un segnalibro.
— Brian Risk,

1
@Manos In MySQL, sembra CURDATE()che non ritorni una data con una porzione di tempo, quindi va a 00. Ho risolto usando NOW()invece di CURDATE().
— 4castle,

21

MySQL:

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

L'INTERVALLO può essere in ANNO, MESE, GIORNO, ORA, MINUTI, SECONDI

Ad esempio, negli ultimi 10 minuti

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

3
Questa è la risposta che risponde meglio alla domanda specifica: come restituire le 24 ORE PRECEDENTI (dal momento presente), al contrario delle 24 precedenti (che suggeriscono tutti i risultati per il giorno precedente). Questo ha risposto ai miei requisiti, questo ha ottenuto il mio voto. EDIT: vale la pena menzionare la colonna table_name.the_date dovrebbe essere un timestamp.
— Anthony Cregan,

8

Quale SQL non è stato specificato, SQL 2005/2008

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

Se utilizzi i tipi di data di maggiore accuratezza del 2008, utilizza invece la nuova funzione sysdatetime (), allo stesso modo se utilizzi gli orari UTC scambia internamente con le chiamate UTC.


7

in postgres, supponendo che il tipo di campo sia un timestamp:

seleziona * dalla tabella dove date_field> (now () - intervallo '24 hour ');


4

Se il timestamp considerato è un timestamp UNIX È necessario prima convertire il timestamp UNIX (ad es. 1462567865) in timestamp o dati mysql

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

Ciò presuppone che il motore utilizzato sia MySQL poiché FROM_UNIXTIME () è una funzione MySQL. Per l'uso di SQL Server: SELECT DATEDIFF(s, '1970-01-01 00:00:00', DateField) se è necessaria un'accuratezza di millisecondi in SQL Server 2016 e versioni successive: SELECT DATEDIFF_BIG(millisecond, '1970-01-01 00:00:00', DateField)
— luisdev


2

Ciao, ora sono passato molto tempo dal post originale, ma ho avuto un problema simile e voglio condividere.

Ho un campo datetime con questo formato AAAA-MM-GG hh: mm: ss e voglio accedere a un'intera giornata, quindi ecco la mia soluzione.

La funzione DATE (), in MySQL: estrae la parte data di un'espressione data o datetime.

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

con questo ottengo tutti i registri delle righe in questo giorno.

Spero che possa aiutare chiunque.


Questo è l'unico che ha funzionato per me su mySQL. Per qualche motivo quando ho provato SELEZIONA * DA myTable DOVE myDate> DATE_SUB ('2018-06-13 00:00:00', INTERVAL 24 HOUR); Stavo ancora ottenendo record dal 14/06/2018.
— jDub9,

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

1

In SQL Server (per le ultime 24 ore):

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

2
perché dovresti aggiungere "e order_date <= GETDATE ()" quando stai già cercando le ultime 24 ore dal momento in cui è stata eseguita la query? Non ha davvero senso avere quella parte nella clausola where quando hai "GETDATE" già menzionato nel primo. È meglio che lo faccia "order_date> = DateAdd (DAY, -1, GETDATE ())" questo è tutto!
— KMX,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.