Как получить записи из базы данных за определенный интервал? - PullRequest
0 голосов
/ 19 марта 2010

В моей таблице есть записи за каждую минуту, теперь я хочу получать записи с интервалом 5 минут!

Например

order date
 1    12:01
 2    12:02
 ....

 10   12:10
 11   12:11

Ожидаемый результат: заказы 6 и 11

Можно ли это сделать на уровне базы данных?

Я использую Django с MySQL

Ответы [ 3 ]

3 голосов
/ 20 марта 2010
SomeModel.objects.extra(select={'fiveminutes': 'MINUTE(date)%5=0'},
  where='fiveminutes=1')
0 голосов
/ 21 марта 2010

Если я понимаю, что вы хотите,

например, каждая 5-я запись в таблице?Или, говоря иначе, в каждой записи, где порядок делится на 5?

Я делаю это из головы, потому что у меня нет mysql db, чтобы играть с

SELECT * from Table where (order MOD 5) = 1;

(=1 даст вам делимое на 5 + 1, поэтому 6, 11, 16 и т. Д.)

Попробуйте и посмотрите, смочите ли вы то, что ищете.

См. эту страницу Подробнее о функции MOD

0 голосов
/ 21 марта 2010

Хотите ли вы группировать заказы, основываясь на двенадцати пятиминутных интервалах в час? Под пятиминутными интервалами я подразумеваю отображение минут на интервалы следующим образом: (0..4 => 0, 5..9 => 1, 10..14 => 2, ...).

all_with_interval = SomeModel.objects.extra(
        select={'interval': "strftime('%%M', date)/5"})
just_minutes_5_to_9 = all_with_interval.extra(
        where=["interval=%d"], params=[0])

Или, может быть, вы хотите пятиминутный диапазон от заданного времени начала:

end_time = start_time + datetime.timedelta(minutes=5)
start_plus_5_inclusive = SomeModel.filter(date__range=(start_time, end_time)
start_plus_5_exclusive = start_plus_5_inclusive.exclude(end_time)

Функция exclude () существует, потому что фильтр диапазона является включающим, и вы, вероятно, хотите исключить время окончания для этого текущего вопроса. Если вы не исключите время окончания, вы можете получить записи за 5 минут + ~ 1 секунду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...