Django ORM for select max(field1) from table group by (field2);
Django ORM for select max(field1) from table group by (field2);
我有以下型号:
class Transition(models.Models):
id = models.AutoField(primary_key=True)
transition_type = models.IntegerField(dbcolumn='transition_typeid')
instance = models.IntegerField(dbcolumn='instanceid')
ts = models.DateTimeField()
class Meta:
managed=False
db_table = 'transitions'
我想使用 Django 的 ORM 发出以下查询:
select max(id) from transitions group by(instanceid);
我知道我可以使用如下原始查询:
Transition.objects.raw('select max(id) from transitions group by (instanceid)')
但是,缺点是查询似乎是立即执行的,并且
不适合进一步过滤,例如我想查询
设置可以应用对说时间戳的进一步过滤器。
有没有办法在不使用 Django 的原始查询的情况下使用纯 ORM 方式发出上面的 select 语句?
这个查询应该适合你
Transition.objects.values('instance').annotate(Max('id'))
文档:https://docs.djangoproject.com/en/1.8/topics/db/aggregation/
我有以下型号:
class Transition(models.Models):
id = models.AutoField(primary_key=True)
transition_type = models.IntegerField(dbcolumn='transition_typeid')
instance = models.IntegerField(dbcolumn='instanceid')
ts = models.DateTimeField()
class Meta:
managed=False
db_table = 'transitions'
我想使用 Django 的 ORM 发出以下查询:
select max(id) from transitions group by(instanceid);
我知道我可以使用如下原始查询:
Transition.objects.raw('select max(id) from transitions group by (instanceid)')
但是,缺点是查询似乎是立即执行的,并且 不适合进一步过滤,例如我想查询 设置可以应用对说时间戳的进一步过滤器。
有没有办法在不使用 Django 的原始查询的情况下使用纯 ORM 方式发出上面的 select 语句?
这个查询应该适合你
Transition.objects.values('instance').annotate(Max('id'))
文档:https://docs.djangoproject.com/en/1.8/topics/db/aggregation/