我在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行,在生产中使用时间太长。
任何帮助?
提前致谢 佩伊奥
答案 0 :(得分:0)
这样的东西?
from datetime import datetime
now = datetime.now()
variable = observation.objects.filter(creation_time__gt=now).values('plant', 'trait', 'creation_time')