我有一个 MySQL 数据库,其中有一些表。
使用此查询:
SELECT anagrafe.MARCHIO, anagrafe.BOLO, anagrafe.NUMERO_AZIENDALE, visite.COLLOCAZIONE, visite.DATA_PREVISTA_PARTO, visite.DATA_VISITA
FROM anagrafe LEFT JOIN visite USING(NUMERO_AZIENDALE)
WHERE visite.STATO_VISITA ='Gravida' AND visite.DATA_PREVISTA_PARTO > '2017-04-01'
我明白了: 但我只需要每个 NUMERO_AZIENDALE 具有 max(DATA_VISITA) 的行(见红色)
NUMERO_AZIENDALE 是anagrafe(一张表)的外键,也是visite(一张表)的主键的一部分。 主键由 NUMERO_AZIENDALE 和 ID 组成(此处未显示)
我尝试使用 GROUP BY NUMERO_AZIENDALE,但是 visite.COLLOCAZIONE 没有正确显示,也就是说,查询显示了我不需要的行的值
最佳答案
您可以对基于 NUMERO_AZIENDALE 和 DATA_VISITA 按 NUMERO_AZIENDALE 分组的元组使用 in 子句
SELECT anagrafe.MARCHIO, anagrafe.BOLO, anagrafe.NUMERO_AZIENDALE,
visite.COLLOCAZIONE, visite.DATA_PREVISTA_PARTO, visite.DATA_VISITA
FROM anagrafe LEFT JOIN visite USING(NUMERO_AZIENDALE
WHERE visite.STATO_VISITA ='Gravida' AND visite.DATA_PREVISTA_PARTO > '2017-04-01'
AND (anagrafe.NUMERO_AZIENDALE, visite.DATA_VISITA ) IN
(
SELECT anagrafe.NUMERO_AZIENDALE, max(visite.DATA_VISITA)
FROM anagrafe LEFT JOIN visite USING(NUMERO_AZIENDALE)
WHERE visite.STATO_VISITA ='Gravida'
AND visite.DATA_PREVISTA_PARTO > '2017-04-01'
GROUP BY anagrafe.NUMERO_AZIENDALE
)
关于mysql - 从行中为每个外键选择最大数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44263435/