Mysql GroupBy问题如何获取最后一个id?
我有四个相关的表,使用以下查询,将它们与4个左联接和2个最大聚合函数组合在一起: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,
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。。。