Mysql GroupBy问题如何获取最后一个id?

Mysql GroupBy问题如何获取最后一个id?,mysql,group-by,Mysql,Group By,我有四个相关的表,使用以下查询,将它们与4个左联接和2个最大聚合函数组合在一起: SELECT SQL_CALC_FOUND_ROWS id, cognome, nome, sesso, pr_sedute_complessive, presa_in_carico_data, cf, cnome, tdr_cognome,

我有四个相关的表,使用以下查询,将它们与4个左联接和2个最大聚合函数组合在一起:

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最高,而不是第一个。我曾尝试使用MAXprimaryKey,但我只得到了密钥,而没有得到包含该pKey的记录。

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

假设tbl_Cartella Clinica和tbl_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
因此,修改后的查询将是:

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

上次插入的id是什么意思?MySQL不跟踪记录插入到表中的顺序。query获取用户和相关项目的列表tbl_progetto如何在同一查询中检索具有高ID主键的项目?@Double我尝试按ID DESC LIMIT 1使用子查询顺序,但只返回一行…您实际想做什么?最后插入的id和高id不是一回事。对不起,我的错误,高id是我的目标!不是最后一次插入Hanks eggyval,而是返回我1052-字段列表中的“pr_id”列不明确OK我从选择中删除了它。我很感激你,我不知道如何感谢你。那两天我都想出去!多谢各位much@paskuale:如果它解决了你的问题,如果你觉得它有用或有帮助,你可以感谢我这是一个由php为datatable jQuery对象管理的查询:似乎不喜欢带点的表名。eggyval one quest。。。为什么COUNTtbl\u trattamenti.trt\u id返回我0?在旧查询中为2。。。