Jak wybrać rekordy z ostatnich 24 godzin za pomocą SQL?


185

Szukam whereklauzuli, której można użyć do odzyskania rekordów z ostatnich 24 godzin?


1
Czy masz pole datownika na tych rekordach?
— Shawn Steward,

Odpowiedzi:


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

6
Jeśli rekordy są przechowywane jako DATETIME, spowoduje to wybranie wszystkich rekordów z poprzedniej daty, niezależnie od części czasu. Uruchomione o 23:59:59, zapytanie zwróci wszystkie rekordy z ostatnich 48godzin, a nie 24.
— Quassnoi,

18
Jeśli chcesz wybrać ostatnie 24 godziny z pola daty i godziny, zamień „curate ()” na „now ()”. Obejmuje to także czas.
— Haentz

564

W MySQL:

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

W SQL Server:

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

W Oracle:

SELECT  *
FROM    mytable
WHERE   record_date >= SYSDATE - 1

W PostgreSQL:

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

W Redshift:

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

W SQLite:

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

W MS Access:

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

3
Próbuję kwerendy dla mysql, ale jeśli na przykład jego 2AM, otrzymuję rekordy od 00 do 02 rano. Tylko dwie godziny zamiast 24. Jakieś pomysły?
— Manos

Bardzo podoba mi się przedstawione tutaj rozwiązanie, właśnie zauważyłem w MySQL, że wydajność rozwiązania Guillaume Flandre była szybsza.
— oneworld

1
W Amazon Redshift rozumiem function getdate() does not exist. Zastąpiłem go current_datei działało dobrze.
— FloatingRock,

1
Ta odpowiedź sprawia, że ​​żałuję, że nie ma przycisku „gwiazda”, ponieważ chcę to dodać do zakładek.
— Brian Risk

1
@Manos W MySQL wygląda na to, że CURDATE()nie zwraca daty z określoną częścią czasu, więc idzie do 00. Naprawiłem to za pomocą NOW()zamiast CURDATE().
— 4castle

21

MySQL:

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

INTERWAŁ może być w ROKU, MIESIĄCU, DNIU, GODZINIE, MINUTIE, SEKUNDIE

Na przykład w ciągu ostatnich 10 minut

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

3
Oto odpowiedź, która najlepiej odpowiada na konkretne pytanie: Jak zwrócić WCZEŚNIEJSZE 24 GODZINY (od chwili obecnej), w przeciwieństwie do poprzednich 24 (co sugeruje wszystkie wyniki z poprzedniego dnia). To spełniło moje wymagania, zyskało moje poparcie. EDYCJA: Warto wspomnieć o nazwie nazwa_tabeli. Kolumna_data powinna być znacznikiem czasu.
— Anthony Cregan

8

Który SQL nie został określony, SQL 2005/2008

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

Jeśli używasz typów dat o podwyższonej dokładności w 2008 r., Zamiast tego użyj nowej funkcji sysdatetime (), podobnie jeśli używasz czasów UTC wewnętrznie zamieniających się na wywołania UTC.


7

w postgres, zakładając, że typ pola jest znacznikiem czasu:

wybierz * z tabeli, w której pole data> (teraz () - interwał „24 godziny”);


4

Jeśli rozważany znacznik czasu jest znacznikiem czasu UNIX, należy najpierw przekonwertować znacznik czasu UNIX (np. 1462567865) na znacznik czasu mysql lub dane

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

Zakłada się, że używany silnik to MySQL, ponieważ FROM_UNIXTIME () jest funkcją MySQL. Do użytku z programem SQL Server: SELECT DATEDIFF(s, '1970-01-01 00:00:00', DateField) Jeśli potrzebujesz dokładności do milisekund w programie SQL Server 2016 i nowszych, użyj: SELECT DATEDIFF_BIG(millisecond, '1970-01-01 00:00:00', DateField)
— luisdev


2

Witaj, minęło już dużo czasu od oryginalnego postu, ale mam podobny problem i chcę się podzielić.

Mam pole daty i godziny w tym formacie RRRR-MM-DD gg: mm: ss i chcę uzyskać dostęp przez cały dzień, więc oto moje rozwiązanie.

Funkcja DATE () w MySQL: Wyodrębnij część daty wyrażenia date lub datetime.

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

dzięki temu otrzymuję cały rejestr wierszy w tym dniu.

Mam nadzieję, że każdemu pomoże.


To jedyny, który działał dla mnie na mySQL. Z jakiegoś powodu, kiedy próbowałem WYBIERZ * z myTable GDZIE myDate> DATE_SUB ('2018-06-13 00:00:00', INTERVAL 24 HOUR); Wciąż otrzymywałem rekordy od 14.06.2018.
— jDub9


1

W SQL Server (z ostatnich 24 godzin):

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

2
dlaczego miałbyś dodawać „i order_date <= GETDATE ()”, gdy już szukasz ostatnich 24 godzin od momentu wykrycia tego zapytania? Naprawdę nie ma sensu mieć tej części w klauzuli where, gdy masz już napis „GETDATE” w pierwszym. Lepiej, żeby to było „order_date> = DateAdd (DAY, -1, GETDATE ())” to wszystko!
— KMX
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.