2017-01-04 7 views
-1

過去24時間以内にデータベースに追加された行の量を返したいとします。次のコードは、実際に動作するはずです:MySQL最後の24時間の行の量を照会

id_24h_back = "SELECT id FROM table WHERE datetime = now() - INTERVAL 1 DAY;" 
id_now = "SELECT id FROM table WHERE datetime = now();" 
amount_rows = id_now - id_24h_back 

私は、このコードは実際に動作し、私が必要とする結果をもたらすだろうと思いますが、問題は、行が毎秒がないこと、であるので、私は空を取得します24時間前の日時が例えば10:10:10に追加されましたが、次の行が10:10:11に追加されました。

編集: 私の解決策は次のようになります。

current_time = datetime.datetime.utcnow() 
x_time_back = current_time - datetime.timedelta(hours=24)  #24h 
qry = "SELECT something FROM table_name WHERE x_datetime between " + str(x_time_back.strftime("'%Y-%m-%d %H:%M:%S'")) + " and " + str(current_time.strftime("'%Y-%m-%d %H:%M:%S'")) 
qry_res = db.engine.execute(qry) 

とにかくお手伝いをしてくれてありがとう。また、私の質問を理由なしに下落させた人々にも感謝します。

+2

'SELECT COUNT(ID)FROMテーブルWHERE datetime> now() - INTERVAL 1 DAY;'? – mata

+0

これがなぜ投票に失敗したのか... – saitam

答えて

1

@mataそれは正しいです。これにより、カウントと、カウントが開始されたときの実際のタイムスタンプが表示されます。

SELECT COUNT(*) count, NOW() - INTERVAL 1 DAY since 
    FROM table 
WHERE datetime >= NOW() - INTERVAL 1 DAY 

これで良好なパフォーマンスを得るには、datetime列にインデックスが必要です。

プロヒント:列名のために、TIMESTAMPDATE、またはDATETIMEのように、データ型の名前を使用しないでください。代わりにdatestampまたはinsertion_timeなどのものを使用してください。複雑なクエリの記述やデバッグが容易になります。

関連する問題