2017-01-04 2 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 table 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 колонки.

Совет: не используйте имена типов данных, например TIMESTAMP, DATE, или DATETIME, для имен столбцов. Вместо этого используйте что-то вроде datestamp или insertion_time или некоторые такие вещи. Это упростит запись и отладка сложных запросов.

Смежные вопросы