Python 如何使用Django';当3行或更多行被分组时,是否仅返回一组行?
鉴于以下模型:Python 如何使用Django';当3行或更多行被分组时,是否仅返回一组行?,python,mysql,django,Python,Mysql,Django,鉴于以下模型: class Enquiry(models.Model): enquiryparent = models.ForeignKey('self',default=None, null=True, blank=True) type = models.SmallIntegerField() name = models.CharField(max_length=200) mobile = models.CharField(max_length=40,blank
class Enquiry(models.Model):
enquiryparent = models.ForeignKey('self',default=None, null=True, blank=True)
type = models.SmallIntegerField()
name = models.CharField(max_length=200)
mobile = models.CharField(max_length=40,blank=True,null=True)
email = models.EmailField(blank=True,null=True)
message = models.TextField(blank=True,null=True)
registered = models.DateTimeField(auto_now_add=True)
如何在Django中编写以下查询:
计算特定类型,例如“x”,其中移动设备在三天内(使用注册日期)是唯一的,用于整个集合
例如:
id, type, mobile, registered
1, 2, 988, 01/11/2011
1, 2, 988, 02/11/2011
1, 2, 988, 03/11/2011
1, 4, 988, 04/11/2011
1, 2, 988, 05/11/2011
1, 2, 988, 06/11/2011
1, 2, 988, 07/11/2011
1, 2, 555, 07/11/2011
结果应该是:
id, type, mobile, registered
1, 2, 988, 03/11/2011
1, 2, 988, 05/11/2011
1, 2, 555, 07/11/2011
Count total=3。如果我理解正确,这似乎是可行的,但不幸的是,我不熟悉Django的ORM。我认为基本想法可能如下所示:
- 通过
(id
)选择一个始终等于1的静态整数列,以及一个类似id==1
sum(static1)
- 按
筛选(如示例中的type
)type==2
- 按注册的
排序
- 分组依据
mobile
等于或大于3的过滤器sum(static1)
我知道这在原始SQL中是可能的,但我不知道如何在Django的ORM中实现。您的另一个选择是为循环编写一个,用于累积结果。您能解释一下“唯一”是什么意思吗?您的示例不够清楚。如果数字在3天内出现多次,则只计算一次。对吗?对于sql来说太复杂了。@Digivampire,#Skirmantas已经正确地解释了它-只是重复一下,如果一个数字在3天内出现不止一次,它应该被计算为一次。