Heim > Fragen und Antworten > Hauptteil
Formular:
Aufgabe: id(bigint) name(varchar). Aufgabendetails speichern
Jobs: id(varchar(UUID)) task_id(bigint(class ID)), staus >(varchar(50)), created_time(timestamp). Details zur Aufgabenausführung speichern
Mögliche Werte für den Status sind FAIL/COMPLETED/INTERRUPTED
Was ich erreichen möchte ist Holen Sie sich alle aktuellen Werte für jede Aufgabe aus der Jobtabelle
Wenn die Aufgabe keinen Job enthält, ist der Rückgabestatus null
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
对于支持 ROW_NUMBER()
的 SQL 版本,您可以这样做:
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
否则,只需使用 cte 或子查询。
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