Sto cercando una clausola where
che può essere utilizzata per recuperare i record delle ultime 24 ore?Come selezionare i record delle ultime 24 ore utilizzando SQL?
risposta
SELECT *
FROM table_name
WHERE table_name.the_date > DATE_SUB(CURDATE(), INTERVAL 1 DAY)
Se i record sono memorizzati come 'DATETIME', questo selezionerà tutti i record dalla data precedente, ignorando la parte relativa all'ora. Eseguito a '23: 59: 59', la query restituirà tutti i record per le ultime 48 ore, non' 24'. – Quassnoi
Se si desidera selezionare le ultime 24 ore da un campo datetime, sostituire "curate()" con "now()". Questo include anche il tempo. – Haentz
select ...
from ...
where YourDateColumn >= getdate()-1
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)
Provo la query per mysql ma se il suo 2AM, ad esempio, ottengo i record da 00 a 02 AM. Solo due ore invece di 24. Qualche idea? – Manos
Mi piace molto la soluzione fornita qui, solo quello che ho notato in MySQL è la performance della soluzione _Guillaume Flandre_ era più veloce. – oneworld
Risposta perfetta! – Bertie
SELECT *
FROM tableName
WHERE datecolumn >= dateadd(hour,-24,getdate())
cui SQL non è stato specificato, SQL 2005/2008
SELECT yourfields from yourTable WHERE yourfieldWithDate > dateadd(dd,-1,getdate())
Se siete sul 2008 è salito tipi data la precisione, quindi utilizzare la funzione nuova sysdatetime(), invece, altrettanto se si utilizza UTC volte scambiare internamente al UTC chiamate.
In SQL Server (per ultime 24 ore):
SELECT *
FROM mytable
WHERE order_date > DateAdd(DAY, -1, GETDATE()) and order_date<=GETDATE()
perché dovresti aggiungere "e order_date <= GETDATE()" quando stai già cercando le ultime 24 ore dal momento dell'execisione di quella query? Non ha senso avere quella parte nella clausola where quando hai "GETDATE" già menzionato nel primo. È meglio farlo "order_date> = DateAdd (DAY, -1, GETDATE())" questo è tutto! – KMX
in Postgres, supponendo che il tipo di campo è un timestamp:
select * from tabella in cui date_field> (ora() - intervallo '24 ore ');
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, minuto, secondo
Ad esempio, negli ultimi 10 minuti
SELECT *
FROM table_name
WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 10 MINUTE)
Questa è la risposta che meglio risponde alla domanda specifica: Come restituire il PRECEDING 24 ORE (dal momento presente), in contrasto con il precedente 24 (che suggerisce tutti i risultati per il giorno precedente). Questo ha risposto alle mie esigenze, questo ottiene il mio upvote. EDIT: Vale la pena menzionare la table_name.the_date column dovrebbe essere un timestamp. –
Se il timestamp considerato è un timestamp UNIX È necessario prima convertire la data/ora UNIX (ad esempio 1462567865) in data/ora mysql o data
SELECT * FROM `orders` WHERE FROM_UNIXTIME(order_ts) > DATE_SUB(CURDATE(), INTERVAL 1 DAY)
Ciao ora ho passato un sacco di tempo dal post originale ma ho avuto un problema simile e voglio condividere.
Ho ottenuto un campo datetime con questo formato AAAA-MM-GG hh: mm: ss, e voglio accedere a un giorno intero, quindi ecco la mia soluzione.
La funzione DATE(), in MySQL: consente di estrarre la parte della data di un'espressione data o data/ora.
SELECT * FROM `your_table` WHERE DATE(`your_datatime_field`)='2017-10-09'
con questo ottengo tutto il registro di riga in questo giorno.
Spero che sia di aiuto a chiunque.
Hai un campo data/ora su questi record? –