SQLを使用して過去24時間のレコードを選択するにはどうすればよいですか?


185

where過去24時間のレコードを取得するために使用できる句を探していますか?


1
これらのレコードにタイムスタンプフィールドがありますか?
ショーンスチュワード

回答:


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

6
レコードがとして保存されている場合DATETIME、これは時間の部分を無視して、前の日付のすべてのレコードを選択します。で実行された23:59:59場合、クエリは48でなく、過去1 時間のすべてのレコードを返します24
Quassnoi、2009

18
日時フィールドから過去24時間を選択する場合は、「curate()」を「now()」に置き換えます。これには時間も含まれます。
Haentz 2011

564

MySQL

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

SQL Server

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

Oracle

SELECT  *
FROM    mytable
WHERE   record_date >= SYSDATE - 1

PostgreSQL

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

Redshift

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

SQLite

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

MS Access

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

3
私はmysqlのクエリを試しますが、たとえば午前2時の場合、00-02 AMのレコードを取得します。24時間ではなく2時間のみ。アイデアはありますか?
Manos 14

ここで提供されているソリューションが非常に気に入っています。MySQLで指摘したのは、ギヨームフランドルソリューションのパフォーマンスが高速だったことです。
oneworld 2014

1
Amazon Redshiftでは、を取得しfunction getdate() does not existます。それをに置き換えたところ、問題なく動作しましたcurrent_date
FloatingRock

1
この答えは私がこれをブックマークしたいので「星」ボタンがあったらいいのにと思います。
ブライアンリスク

1
@Manos MySQLではCURDATE()、時刻部分を含む日付を返さないように見えるため、に移動し00ます。のNOW()代わりに使用して修正しましたCURDATE()
キャッスル2018

21

MySQL:

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

INTERVALは、YEAR、MONTH、DAY、HOUR、MINUTE、SECONDにすることができます

たとえば、過去10分間

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

3
これは、特定の質問に最もよく答える答えです。前の24時間(前日のすべての結果を示唆)とは対照的に、(現在の瞬間から)前の24時間を返す方法。これは私の要件に答えました、これは私の賛成票を取得します。編集:table_name.the_date列はタイムスタンプであることに言及する価値があります。
Anthony Cregan 2017

8

指定されなかったSQL、SQL 2005/2008

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

2008年の精度の高い日付タイプを使用している場合は、代わりに新しいsysdatetime()関数を使用します。UTC時間を使用すると、内部的にUTC呼び出しにスワップされます。


7

postgresでは、フィールドタイプがタイムスタンプであると仮定します。

date_field>(now()-間隔'24時間 ')のテーブルから*を選択します。


4

考慮されるタイムスタンプがUNIXタイムスタンプの場合最初にUNIXタイムスタンプ(例1462567865)をmysqlタイムスタンプまたはデータに変換する必要があります

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

FROM_UNIXTIME()はMySQL関数であるため、使用されているエンジンはMySQLであると想定しています。SQL Serverの使用のSELECT DATEDIFF(s, '1970-01-01 00:00:00', DateField) 場合: SQL Server 2016以降でミリ秒の精度が必要な場合: SELECT DATEDIFF_BIG(millisecond, '1970-01-01 00:00:00', DateField)
luisdev


2

こんにちは私は今、元の投稿から多くの時間を過ぎましたが、同様の問題が発生したので共有したいと思います。

私はこのフォーマットYYYY-MM-DD hh:mm:ssの日時フィールドを取得しました。1日中アクセスしたいので、これが私の解決策です。

MySQLの関数DATE():日付または日付時刻式の日付部分を抽出します。

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

これで、この日のすべての行レジスターを取得します。

だれでもお役に立てば幸いです。


これはmySQLで私のために働いた唯一のものです。何らかの理由でSELECT * FROM myTable WHERE myDate> DATE_SUB( '2018-06-13 00:00:00'、INTERVAL 24 HOUR);を試したところ、2018-06-14からまだレコードを取得していました。
jDub9


1

SQL Serverの場合(過去24時間):

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

2
そのクエリが実行された瞬間から過去24時間をすでに探しているときに、「and order_date <= GETDATE()」を追加する必要があるのはなぜですか?最初の項で「GETDATE」がすでに言及されている場合、その部分をwhere句に含めても意味がありません。"order_date> = DateAdd(DAY、-1、GETDATE())"にすることをお勧めします。
KMX 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.