Добрый день.
У нас есть модель с примерными данными
id DateTime Value
133 "2015-04-17 12:12:54 +04" 23
134 "2015-04-17 12:13:54 +04" 23
135 "2015-04-17 12:23:54 +04" 23
136 "2015-04-17 12:44:54 +04" 25
137 "2015-04-17 14:52:54 +04" 42
138 "2015-04-17 15:45:54 +04" 42
Нам нужно запросить все записи чей DateTime не пересекается с ближайшими записями в пределах 15 минут.
Т.е 133 подходит
136 подходит так как 44 - 23 > 15 минут
137 и 138 да остальные нет.
Наверное это задача кластеризации, т.е нужно сформировать группы записей с границами в 15 минут. Если более 15 минут то это новый кластер. Проблема в том что я не знаю как это реализовать в виде корректного алгоритма :/.
Наверное нужно что то вроде этого.
Псевдопитонокод
last_row_date_time = datetime.datetime()
groups = [] #Distinct groups
for row in Data.objects.all().order_by('datetime')
if (row.datetime - last_row_date_time) > datetime.timedelta(minutes=15)
groups.append(row)
print "New group"
else:
print "Old group"
Но я не понимаю насколько это корректное решение. Возможно есть какие-то более оптимальные способы решения задачи?