suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Holen Sie sich die neueste Datenzeile

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粉277464743P粉277464743229 Tage vor438

Antworte allen(1)Ich werde antworten

  • P粉755863750

    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

    Antwort
    0
  • StornierenAntwort