【问题标题】:django select rows by max value of fielddjango按字段的最大值选择行
【发布时间】:2017-06-29 01:17:18
【问题描述】:

我在 django 中有一张这样的表:

class Observation:
    plant = model.ForeignKey
    Trait = model.ForeignKey
    value = model.CharField
    creation_time = model.DateTimeField

我想进行查询以仅获取具有独特植物/性状组合的最新行。例如:

row1 plant1 trait1 value1 dateyesterday
row2 plant1 trait1 value3 datetoday
row3 plant1 trait2 value1 datetoday

查询应该只返回 row2 和 row3

我已经用 SQL 解决了:

SELECT * FROM vavilov_observation AS o
WHERE o.creation_time = (SELECT MAX(creation_time)
                         FROM vavilov_observation AS o2
                         WHERE o.plant_id=o2.plant_id AND o.trait_id=o2.trait_id)

有人可以帮我把这个 SQL 转换成 django 查询集吗?

到目前为止,我发现的唯一解决方案是使用此 sql 创建一个原始查询集,以从中获取 pks 并在 Observations.objects.filter(observation_id__in=rawquery_ids) 查询中使用它们。

这种方法的可扩展性不好。在其中一个数据库中,我有 500.000 行,并且在生产中使用需要很长时间。

有什么帮助吗?

提前致谢 佩奥

【问题讨论】:

    标签: django django-queryset


    【解决方案1】:

    这样的?

    from datetime import datetime
    now = datetime.now()
    variable = observation.objects.filter(creation_time__gt=now).values('plant', 'trait', 'creation_time')
    

    【讨论】:

    • 这是我现在要问的。
    • 我不明白你的评论是什么意思。
    • 抱歉 Zorpho,我是用电话写的。我的意思是你的解决方案不是我想要的。还是谢谢
    猜你喜欢
    • 1970-01-01
    • 2022-06-23
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多