Obtenez la dernière ligne de données
P粉277464743
P粉277464743 2024-04-02 15:27:20
0
1
493

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粉277464743
P粉277464743

répondre à tous(1)
P粉755863750

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
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal