Выбрать из таблицы данные за последние 6 часов

verfaa

Профессор
Регистрация
29 Янв 2007
Сообщения
416
Реакции
49
В БД MySQL есть таблица в которой есть поле date_creation, в котором содержится дата формата datetime, т.е. в ней хранятся данные вида 2012-07-18 07:30:26.

Как выбрать данные из таблицы, которые были добавлены за последние 6 часов?
За последние 24 часа?
 
а так получится?
SELECT * FROM `таблица`
WHERE HOUR(TIMEDIFF(now(), `date_creation`)) <= количество часов
 
SELECT * FROM Таблица WHERE UNIX_TIMESTAMP (date_creation) > UNIX_TIMESTAMP ('2012-12-03 17:11:25'), т.е. всё, что позже 2012-12-03 17:11:25
ORDER BY и LIMIT – по вкусу
 
Leony мне нужно не записи, которые старше определенной даты, а выбрать записи которые были добавлены за последние 6 часов.
ipbfan2008, а что в переменной date_entered храниться?
Вообщем, вопрос пока открыт...
 
Я имел ввиду отнять кол-во часов и ввести эту дату. В принципе согласен, неудобно.

SELECT * FROM Таблица WHERE TIMEDIFF(SYSDATE(),date_creation)<7
Для 24 часов – то же, чтолько "<25" в конце
 
Leony мне нужно не записи, которые старше определенной даты, а выбрать записи которые были добавлены за последние 6 часов.
ipbfan2008, а что в переменной date_entered храниться?
Вообщем, вопрос пока открыт...
это не переменная, а название поля date_entered
есть таблица в которой есть поле date_creation, в котором содержится дата формата datetime
извини, ошибся в названии поля, но там не составляго большого труда понять и поменять, сравнивается значения для каждой записи и выборка должна возвращать только записи у которых дата не больше чем разница часов в условии, относительно now(). поправил свой пост, чтоб не конфузить
 
мне нужно не записи, которые старше определенной даты, а выбрать записи которые были добавлены за последние 6 часов.

А это не одно и тоже вы чейчас говорите батенька ?

select * from table where date > date_sub(now(), interval 6 hour)

Вот вам еще способ. Я на сколько понимаю поле date_creation - это и есть поле даты создания. Чтобы выбрать записи "созданные за последние 6 часов" это равносильно "выбрать записи, дата создания которых больше чем (дата - 6 часов)". Это логика. Если вы используете поле date_creation как date_updated, тоесть записываете туда новую дату при прикосновении к строке- то уже никак не выбрать. Если только конечно у вас не установленны тригеры на какие либо действия.
 
Ну тут зависит от того какую БД ты используешь. Вообще, это все очень легко гуглится на тему 'mysql DATE_SUB in postrees' Тут же приведу пример из первой же ссылки по разнице:

PostgreSQL​
MySQL​
datefield + 6 DATE_ADD(datefield, INTERVAL 6 DAY)
datefield + INTERVAL '6 months' DATE_ADD(datefield, INTERVAL 6 MONTH)
datefield - INTERVAL '6 months' DATE_SUB(datefield, INTERVAL 6 MONTH)


Последняя строка- то что надо. Всегда надо понимать что синтаксис БД всегда немного разный. Поэтому надо просто с этим столкнуться. Я вот до недавнего времени не знал что PGSQL имеет чувствительность к регистру и where a = b приходилось переписывать на where lower(a) = lower(b)
 
Назад
Сверху