Maison > Questions et réponses > le corps du texte
Formulaire :
Tâche : id(bigint) name(varchar). Enregistrer les détails de la tâche
Jobs : id(varchar(UUID)) task_id(bigint(class ID)), staus >(varchar(50)), created_time(horodatage). Enregistrer les détails de l'exécution de la tâche
Les valeurs possibles pour le statut sont FAIL/COMPLETED/INTERRUPTED
Ce que je veux réaliser, c'est Obtenez toutes les dernières valeurs pour chaque tâche à partir du tableau des tâches
S'il n'y a pas de travail dans la tâche, le statut de retour est nul
SELECT p.id, j.status FROM tas p inner JOIN job j ON j.task_id = p.id inner JOIN job j1 ON j.task_id = j1.task_id and j.create_time > j1.create_time;
P粉7558637502024-04-03 12:13:54
Pour les versions SQL prenant en charge ROW_NUMBER()
, vous pouvez faire ceci :
WITH info as( SELECT p.id, j.status, ROW_NUMBER() OVER(PARTITION BY p.id ORDER BY j.created_time DESC) AS rn FROM tas p LEFT JOIN job j ON j.task_id = p.id ) SELECT id, status FROM info WHERE rn = 1
Sinon, utilisez simplement cte ou subquery.
SELECT p.id, t.status FROM tas AS p LEFT JOIN ( SELECT task_id, MAX(created_time) as created_time FROM job GROUP BY task_id ) as lt ON p.id = lt.task_id LEFT JOIN task AS t ON lt.task_id = t.task_id AND lt.created_time = t.created_time