Django orm get latest for each group Django orm get latest for each group python python

Django orm get latest for each group


If your DB is postgres which supports distinct() on field you can try

Score.objects.order_by('student__username', '-date').distinct('student__username')


This should work on Django 1.2+ and MySQL:

Score.objects.annotate(  max_date=Max('student__score__date')).filter(  date=F('max_date'))


I believe this would give you the student and the data

Score.objects.values('student').annotate(latest_date=Max('date'))

If you want the full Score records, it seems you will have to use a raw SQL query: Filtering Django Query by the Record with the Maximum Column Value