Как получить последний объект за каждый час за последние 7 дней в Django, используя столбец DatetimeField? - PullRequest
0 голосов
/ 31 августа 2018

Я выполняю задачу фильтрации значений из таблицы под названием «Feeds»,

Строка вставляется каждые 10 минут в систему. то есть. 6 строк каждый час. Я храню дату и время в столбце с именем timestamp.

Я хочу отфильтровать последнюю строку каждого такого часа за последние 7 дней.

Вот мой код.

class Feeds(models.Model):
    value = models.FloatField()
    timestamp = models.DateTimeField(auto_now_add=True)`

Пожалуйста, помогите решить эту проблему. Спасибо.

1 Ответ

0 голосов
/ 31 августа 2018

Получите объекты за последние 7 дней, затем получите объекты за каждый час и найдите объект с наибольшим значением даты и времени, исключите другие.

d = datetime.now() - timedelta(days=7)
feeds = Feeds.objects.filter(timestamp__gte=d)
d = d.replace(minute=0, second=0, microsecond=0)
while d <= datetime.now():
    temp = feeds.filter(timestamp__range=(d, d + timedelta(hours=1)))
    if temp:
        temp = temp.exclude(timestamp=temp.all().order_by('-timestamp')[0].timestamp)
        for t in temp:
            feeds = feeds.exclude(timestamp=t.timestamp)            
    d += timedelta(hours=1)
...