より正規化されたデータモデルを使用すると、これを簡単に行うことができます。次のようなアプローチの使用を検討してください:
class NodeGroup(model.Model):
pass
class NodeHealth(model.Model):
node_group = models.ForeignKey(NodeGroup, related_name='nodes')
health_time = models.IntegerField()
status = models.IntegerField()
次に、これを行うことができます:
from django.db.models import Max, F
nodes = NodeHealth.objects.all().annotate(
max_health_time=Max('node_group__nodes__health_time')
).filter(health_time=F('max_health_time'))
残念ながら、その時点で、複数のノードのhealth_time
の値が同じである場合、返されるノードは重複します。 。 .distinct('node_group_id')
を追加できる場合があります それはそれをクリアすることができますが、私は100%ポジティブではありません。