2010-08-10 2 views
2

У меня есть записи в таблице mysql, и я хочу знать, сколько записей было за последние 3, 7 и 12 часов. Каким будет sql для этого? Мое поле в формате,записей sql за последние несколько часов

2010-08-09 09:52:27 
2010-08-09 09:52:27 
2010-08-09 09:52:27 
2010-08-09 10:44:46 
2010-08-09 10:44:46 
2010-08-09 11:58:27 
2010-08-09 14:48:22 
2010-08-09 14:48:22 

ответ

7

За последние три часа:

WHERE column BETWEEN DATE_SUB(NOW(), INTERVAL 3 HOUR) 
       AND NOW() 

За последние семь часов:

WHERE column BETWEEN DATE_SUB(NOW(), INTERVAL 7 HOUR) 
       AND NOW() 

За последние двенадцать часов:

WHERE column BETWEEN DATE_SUB(NOW(), INTERVAL 12 HOUR) 
       AND NOW() 

Если вы хотите указать данных в виде строки, используйте:

WHERE column BETWEEN DATE_SUB(STR_TO_DATE('2010-07-08 07:57:45', '%Y-%m-%d %T'), INTERVAL 3 HOUR) 
       AND STR_TO_DATE('2010-07-08 07:57:45', '%Y-%m-%d %T') 

... хотя, честно говоря, вы могли бы использовать это так же хорошо:

WHERE column BETWEEN STR_TO_DATE('2010-07-08 04:57:45', '%Y-%m-%d %T') 
       AND STR_TO_DATE('2010-07-08 07:57:45', '%Y-%m-%d %T') 

Если это не сработает, то мне интересно, если столбец сохраняя значения как строки/varchar, а не DATETIME.

Ссылка:

+0

Я использовал следующий запрос, но он didnot дать мне правильные результаты $ SQL = «SELECT * FROM' order' WHERE myDateField МЕЖДУ DATE_SUB ("2010-07-08 7:57:45", ИНТЕРВАЛ 3 ЧАСА) AND "2010-07-08 07:57:45" '; – Autolycus

+0

@ user295189: Используйте одиночные, а не двойные кавычки. И если вы используете строку, используйте 'STR_TO_DATE ('2010-07-08 07:57:45', '% Y-% m-% d% T')', чтобы преобразовать строку в DATETIME достоверно –

+0

не работает .. все еще даю мне всего 2 записи с такими же датами и временем -07-08 07:57:45 ' – Autolycus

1

Предполагая, что никакие записи не несут метку времени в будущем, вы можете использовать:

WHERE myDateField > DATE_SUB(NOW(), INTERVAL 3 HOUR) 

за последние три часа значимости записей , и аналогично в течение 7 и 12 часов.

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