SQL kullanarak son 24 saatteki kayıtlar nasıl seçilir?


185

whereSon 24 saat kayıt almak için kullanılabilecek bir madde mi arıyorum ?


1
Bu kayıtlarda zaman damgası alanınız var mı?
Shawn Steward

Yanıtlar:


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

6
Kayıtlar şu şekilde saklanırsa DATETIME, zaman bölümü dikkate alınmadan önceki tarihten itibaren tüm kayıtlar seçilir. Konumunda çalıştırıldığında 23:59:59, sorgu son 48saatlerin tüm kayıtlarını döndürür, döndürmez 24.
Quassnoi

18
Tarih saat alanından son 24 saati seçmek istiyorsanız, 'curate ()' yerine 'now ()' yazın. Buna zaman da dahildir.
Haentz

564

İçinde MySQL:

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

İçinde SQL Server:

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

İçinde Oracle:

SELECT  *
FROM    mytable
WHERE   record_date >= SYSDATE - 1

İçinde PostgreSQL:

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

İçinde Redshift:

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

İçinde SQLite:

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

İçinde MS Access:

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

3
Ben mysql için sorgu denemek ama onun 2AM, örneğin, 00 - 02 AM kayıtları olsun. 24 yerine sadece iki saat.
Manos

Burada sunulan çözümü çok beğendim, MySQL'de belirttiğim gibi Guillaume Flandre çözümünün performansı daha hızlıydı.
oneworld

1
Amazon Redshift'te anladım function getdate() does not exist. Onun yerine current_dateve iyi çalıştı.
FloatingRock

1
Bu cevap bana yer imi koymak istediğim için bir "yıldız" düğmesi olmasını diliyor.
Brian Risk

1
@Manos MySQL'de, CURDATE()zaman bölümü olan bir tarih döndürmüyor gibi görünüyor , bu yüzden gidiyor 00. Bunun NOW()yerine kullanarak sabitledim CURDATE().
4castle

21

MySQL:

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

ARALIK YIL, AY, GÜN, SAAT, DAKİKA, İKİNCİ olabilir

Örneğin, son 10 dakika içinde

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

3
Bu özel soruyu en iyi yanıtlayan cevaptır: Önceki 24'ün aksine (önceki güne ait tüm sonuçları gösteren) ÖNCEKİ 24 SAAT (şimdiki andan itibaren) nasıl iade edilir. Bu benim ihtiyaçlarımı yanıtladı, bu benim oyumu alır. EDIT: table_name.the_date sütununa değinmeye değer bir zaman damgası olmalıdır.
Anthony Cregan

8

Hangi SQL belirtilmedi, SQL 2005/2008

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

2008 artırılmış doğruluk tarihi türlerini kullanıyorsanız, UTC saatlerini dahili olarak UTC çağrılarıyla değiştiriyorsanız, bunun yerine yeni sysdatetime () işlevini kullanın.


7

postgres'de alan türünüzün bir zaman damgası olduğunu varsayarsak:

date_field> (şimdi () - aralık '24 saat ') olan tablodan * seçin;


4

Dikkate alınan zaman damgası UNIX zaman damgasıysa Önce UNIX zaman damgasını (örn. 1462567865) mysql zaman damgasına veya verilere dönüştürmeniz gerekir

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

Bu FROM_UNIXTIME () bir MySQL işlevi olduğu için kullanılan motorun MySQL olduğunu varsayar. SQL Server kullanımı için: SELECT DATEDIFF(s, '1970-01-01 00:00:00', DateField) SQL Server 2016 ve sonraki sürümlerde milisaniye doğruluğa ihtiyacınız varsa: SELECT DATEDIFF_BIG(millisecond, '1970-01-01 00:00:00', DateField)
luisdev


2

Merhaba ben şimdi orijinal yazı çok zaman geçmiş ama benzer bir sorun var ve paylaşmak istiyorum.

YYYY-AA-GG ss: dd: ss biçimiyle datetime alanım var ve tüm güne erişmek istiyorum, işte benim çözümüm.

MySQL'deki DATE () işlevi: Bir tarihin veya datetime ifadesinin tarih bölümünü ayıklayın.

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

Bu ile ben bu gün tüm satır kayıt olsun.

Umarım herkese yardım eder.


Bu, mySQL'de benim için çalışan tek kişi. Herhangi bir nedenle SELT * den myTable'DAN NEREDEN> DATE_SUB ('2018-06-13 00:00:00', 24 ARALIK ARALIĞI); 2018-06-14'ten hala kayıtlar alıyordum.
jDub9

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

1

SQL Server'da (Son 24 saat için):

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

2
bu sorgunun uygulanma anından son 24 saati zaten ararken neden "ve order_date <= GETDATE ()" eklemeniz gerekiyor? İlkinde daha önce "GETDATE" yazdığınızda, nerede yan tümcesinde yer almak gerçekten bir anlam ifade etmiyor. "Order_date> = DateAdd (DAY, -1, GETDATE ())" yapsanız iyi olur!
KMX
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.