2011-06-13 3 views
4

У меня есть следующий запрос:Выбор записей между двумя датами

SELECT dm.app_id, apt.app_name, COUNT(dm.app_id) 
FROM dm_openapp dm 
JOIN app_table apt ON dm.app_id = apt.app_id 
GROUP BY dm.app_id 

В основном эта таблица также даты, связанные с каждой записью, и мне нужно, чтобы получить диапазон всех записей между временем X и Y, I пробовал использовать, например, но безрезультатно:

WHERE dm.dl_time BETWEEN '2011-05-31' AND '2011-05-06' 

Любая идея относительно того, что делать? столбец dl_time является типом времени.

+0

Таким образом, вместо строки «2011 -05-31 'используйте временную метку, соответствующую этой дате. С другой стороны, вы можете преобразовать поле timestamp в datetime, так как вы никогда не должны хранить даты в формате timestamp (timestamp и datetime как внутренне обрабатываются как целые значения, составляющие по 4 байта, так что бессмысленно искать временную метку, когда datetime предлагает гораздо больше когда дело доходит до дат). –

ответ

2

Эммм ... у вас есть данные координат, неправильный путь вокруг. BETWEEN должен быть LOW значение Высокое значение:

Попробуйте это:

WHERE dm.dl_time BETWEEN '2011-05-06' AND '2011-05-31' -- Note date values swapped 

Вы можете игнорировать другие ответы, которые также не заметили этого ...

+0

+1 хорошее пятнистость. Поскольку 'dl_time' - это метка времени, а две (начальная и конечная) даты - это даты, я бы также написал условие как:' WHERE '2011-05-06' <= dm.dl_time И dm.dl_time <'2011-06- 01'' –

7

Для этих целей лучше использовать тип столбца DATETIME. Чем это должно работать: используйте функцию str_to_date(). Кроме того, поменяйте значения BETWEEN.

WHERE dm.dl_time BETWEEN str_to_date('2011-05-06','%Y-%m-%d') AND str_to_date('2011-05-31','%Y-%m-%d') 
Смежные вопросы