0

我有四个相关的表,并使用以下查询将它们与 4 个LEFT JOIN和 2 个MAX()聚合函数结合起来:

SELECT SQL_CALC_FOUND_ROWS
         id,
         cognome,
         nome,
         sesso,
         pr_sedute_complessive,
         presa_in_carico_data,
         cf,
         cnome,
         tdr_cognome,
         tdr_nome,
         COUNT(tbl_trattamenti.trt_id),
         MAX(tbl_trattamenti.data),
         pr_id
FROM     tbl_aziente p1
  LEFT JOIN comuni
         ON comuni.cid = p1.nascita_luogo 
  LEFT JOIN tbl_cartellaclinica
         ON tbl_cartellaclinica.pz_fk_id = p1.id 
  LEFT JOIN tbl_progetto
         ON tbl_progetto.cc_id_fk = tbl_cartellaclinica.cc_id 
  LEFT JOIN tbl_fisioterapista
         ON tbl_fisioterapista.tdr_id = tbl_progetto.pr_fisioterapista_fk 
  LEFT JOIN tbl_trattamenti
         ON tbl_progetto.pr_id = tbl_trattamenti.pr_fk_id 
WHERE    idoneo = 'y'
     AND p1.tipo_assistenza = 4
GROUP BY p1.id
LIMIT 0, 10

这一切都很好,除了一件事:我想要tbl_progetto最高记录id而不是第一记录。我尝试使用MAX(primaryKey),但我只得到了密钥 - 而不是具有该 pKey 的记录。

4

1 回答 1

0

基本原则是您需要引用tbl_progetto 两次——一次在标识id感兴趣记录的子查询中,第二次获取该记录的其余部分。

假设 和 之间存在多对一关系tbl_cartellaclinicatbl_progetto则子查询将是:

SELECT   tbl_cartellaclinica.pz_fk_id, MAX(tbl_progetto.pr_id) AS pr_id
FROM     tbl_cartellaclinica
    JOIN tbl_progetto
      ON tbl_progetto.cc_id_fk = tbl_cartellaclinica.cc_id
GROUP BY tbl_cartellaclinica.pz_fk_id

因此,您修改后的查询将是:

SELECT SQL_CALC_FOUND_ROWS
         id,
         cognome,
         nome,
         sesso,
         pr_sedute_complessive,
         presa_in_carico_data,
         cf,
         cnome,
         tdr_cognome,
         tdr_nome,
         COUNT(tbl_trattamenti.trt_id),
         MAX(tbl_trattamenti.data),
         t.pr_id
FROM     tbl_aziente p1
  LEFT JOIN comuni
         ON comuni.cid = p1.nascita_luogo 
  LEFT JOIN tbl_cartellaclinica
         ON tbl_cartellaclinica.pz_fk_id = p1.id
  LEFT JOIN (
    SELECT   tbl_cartellaclinica.pz_fk_id, MAX(tbl_progetto.pr_id) AS pr_id
    FROM     tbl_cartellaclinica
        JOIN tbl_progetto
          ON tbl_progetto.cc_id_fk = tbl_cartellaclinica.cc_id
    GROUP BY tbl_cartellaclinica.pz_fk_id
  ) AS t ON t.pz_fk_id = tbl_cartellaclinica.pz_fk_id
  LEFT JOIN tbl_progetto
         ON tbl_progetto.cc_id_fk = tbl_cartellaclinica.cc_id
        AND tbl_progetto.pr_id = t.pr_id
  LEFT JOIN tbl_fisioterapista
         ON tbl_fisioterapista.tdr_id = tbl_progetto.pr_fisioterapista_fk 
  LEFT JOIN tbl_trattamenti
         ON tbl_progetto.pr_id = tbl_trattamenti.pr_fk_id 
WHERE    idoneo = 'y'
     AND p1.tipo_assistenza = 4
GROUP BY p1.id
LIMIT    0, 10
于 2012-05-14T11:31:25.990 回答