使用cumedist,filter,order_by的Django窗口表达式

时间:2018-07-25 07:21:11

标签: python sql django

在Django 2.0中,我正在尝试按日期排序所有对象的查询集。然后按参数进行过滤,但随后我也想使用Window(或其他方法)对过滤后的查询集进行注释,并在过滤器之前设置查询集之间的间隔。我知道这听起来很奇怪,我只是不知道如何更好地解释它。我将尝试在下面可视化。

我有一个表演班:

class Show(models.Model):

    date = models.DateField()

    name = models.CharField()

这是我到目前为止的代码:

def name_filter(self, in_name)
    Show.objects.all().order_by('date').filter(name=in_name)
    .annotate(show_gap=Window(expression=CumeDist()))

所以基本上我想做的是找到过滤结果之间的显示次数(差距)。因此,例如,如果数据如下所示。

date        name

01/01/14    alpha
10/10/13    bravo
05/05/12    charlie
06/06/11    alpha
04/04/10    delta

我会打电话给

name_filter('alpha')

然后我将返回一个带有show_gap注释的alpha对象的查询集,这将使我知道它们之间存在3个show间隙。因此,最终结果将如下所示,两个alpha之间存在间隙。第二个结果是显示间隙1,因为它与数据的开头有关。

date        name    show_gap

01/01/14    alpha   3
06/06/11    alpha   1

0 个答案:

没有答案