Django ORM get Последняя версия каждой строки (Inner Join) - PullRequest
0 голосов
/ 31 января 2019

У меня есть таблица (краткая версия курса), подобная следующей

--------------------------------------------------------
|id  | Simulation_Name  | Simulation_Version | sim_key |
--------------------------------------------------------
| 1  | MySim1           | 1                  | 10      |
| 2  | MySim1           | 2                  | 10      |
| 3  | MySim2           | 1                  | 11      |
| 4  | MySim2           | 2                  | 11      |          
--------------------------------------------------------

На внешнем интерфейсе я просто хочу отобразить последнюю версию для каждого моделирования.Буду признателен за любую помощь, как сделать это с помощью Django ORM.Я знаю, что есть поле Max, но оно работает только с датами. В настоящее время я использую Raw SQL с внутренним объединением для достижения этой цели.Любые указатели на ORM?Заранее спасибо

Вот как я это делаю прямо сейчас,

SELECT  *                                   
FROM  
simulation_table AS A INNER JOIN 
(SELECT id, max(simulation_version) as max_version 
from  
simulation_table 
group by sim_key) AS B 
ON 
A.sim_key= B.sim_keyAND A.simulation_version= B.simulation_version

1 Ответ

0 голосов
/ 31 января 2019

Max должно работать с целыми числами:

from django.db.models import Max
simulations = Simulation.objects.values('name').annotate(max_version=Max('version'))
...