Django方式过滤并按时间序列中的ID选择每个月的最后一条记录?

时间:2016-06-02 23:22:45

标签: django postgresql

我有一个时间序列数据存储在postgres中。我希望在给定视频ID的情况下查看每个月的最后记录的观看次数。

VideoID  |   created   |  views
  1        2015-01-01      5
  2        2015-01-01      5
  1        2015-01-15      20
  1        2015-01-28      30
  2        2015-02-01      40
  1        2015-02-01      50
  1        2015-02-26      60  
  1        2015-03-05      100

鉴于模型

from django.db import models

class Video(models.Model):
    id = models.IntegerField()

class VideosStats(models.Model):
    video_id = models.ForeignKey(Video)
    views = models.IntegerField()

我知道有类似的SQL问题,但我想知道如果在django中,你可以完成这个效果。期望的输出:

视频ID 1 [{'已创建':2015-01-28,'观看':30},{'已创建':2015-02-26,'观看& #39;:60},{'已创建':2015-03-05,'观看':100}]

1 个答案:

答案 0 :(得分:0)

因此,如果给定一年,您可以在查询集上执行额外/提取过滤器,以便为每个视频提供每月最新记录。

the_year = 2016 # the year you want
queryset = VideoStats.filter(created__year=the_year)
queryset = queryset.extra(select={'month': "EXTRACT(month from created)"}).values('month').annotate(Max('views')).order_by('month')