sql - Django:按聚合替换组的查询集?

标签 sql database django sqlite django-queryset

我的表结构:

id | file_id(foreign key) | version_id(foreign key) | function_id(foreign key)

id 和 (file_id, version_id, function_id) 是唯一的。

我正在寻找可以模拟以下 sql 查询的 Django 查询集:

select *, max(version_id) from change_metrics group by function_id order by version_id

基本上我需要为所有独特的文件函数组合获取最新版本,因为特定文件函数组合可能存在多个版本。我目前正在使用原始 sql 查询,我想用查询集替换它们。

我无法更改数据库结构,但我愿意接受各种 sql 查询或解决此问题的方法

最佳答案

假设您的模型如下所示:

class Function(models.Model):
    pass

class File(models.Model):
    pass

class Version(models.Model):
    pass

class ChangeMetric(models.Model):
    function = models.ForeignKey(Function)
    file = models.ForeignKey(File)
    version = models.ForeignKey(Version)

您应该能够执行以下操作:

from django.db.models import Max
Function.objects.all().annotate(max_version=Max('changemetric_set__version___id'))

关于sql - Django:按聚合替换组的查询集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24508268/

相关文章:

mysql - 关于连接 int 类型和 varchar 类型的 2 列时的索引

sql - Oracle - 文字与格式字符串错误不匹配

python - Django Rest Framework Serializer 返回 UItextfield 而不是实际值

django - 如何使用 Dropbox 作为 Django 媒体文件存储?

mysql - SQL 选择带有子查询排除的字段

php - 当 if 返回 false 时,如何退出 if 语句而不影响 php 的其余部分

sqlite3 JOIN,GROUP_CONCAT 使用不同的自定义分隔符

php - 存储动态创建的文本字段的输入

sql - 数百个别名/同义词与数据库表的完全限定名称

python - 如何在不使用管理面板的情况下为 django-celery 任务提供参数?