Rumah  >  Soal Jawab  >  teks badan

Dapatkan baris data terkini

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粉277464743P粉277464743181 hari yang lalu352

membalas semua(1)saya akan balas

  • P粉755863750

    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

    balas
    0
  • Batalbalas