Rumah > Soal Jawab > teks badan
Borang:
Tugas: id(bigint) nama(varchar). Simpan butiran tugas
Jobs: id(varchar(UUID)) task_id(bigint(class ID)), staus >(varchar(50)), created_time(timestamp). Simpan butiran pelaksanaan tugas
Nilai yang mungkin untuk status adalah GAGAL/SELESAI/GANGGU
Apa yang saya ingin capai ialah Dapatkan semua nilai terkini untuk setiap tugasan daripada jadual kerja
Jika tiada kerja dalam tugas, status pemulangan adalah batal
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
Untuk versi SQL yang menyokong ROW_NUMBER()
anda boleh melakukan ini:
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
Jika tidak, gunakan sahaja cte atau 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