INNER JOIN 上的 TOP

TOP on INNER JOIN

我有一个 table FISH,它在 HEALTHCHECK 上有一个 JOIN。

ID | NAME 
----------------
1 | JAMES
2 | JOHN
3 | ERIC

健康检查

ID | DATE | FISH_ID
-------------------
1 | 2022-03-01 | 1
2 | 2023-01-01 | 1
3 | 2021-01-03 | 2
4 | 2023-04-07 | 3

我想select一条鱼,而且return只有最近的HEALTHCHECK。

我尝试用以下方法模拟 this answer

SELECT fish.name, fish.id
FROM FISH
JOIN HEALTH_CHECK
ON HEALTH_CHECK.FISH_ID =
   (
   SELECT TOP 1  HEALTH_CHECK.CATCH_DATE
   FROM HEALTH_CHECK
   WHERE FISH_ID = HEALTH_CHECK.FISH_ID
       );

但是那个语法不正确,我只想return一条特定的鱼(fish.id=x)。

我如何 return 从最新的 Health Check 中编辑 select 字段的鱼?

数据库是H2。

我会在这里使用纯连接版本:

SELECT f.NAME, f.ID
FROM FISH f
INNER JOIN HEALTH_CHECK hc1 ON hc1.FISH_ID = f.ID
INNER JOIN
(
    SELECT FISH_ID, MAX(DATE) AS MAX_DATE
    FROM HEALTH_CHECK
    WHERE FISH_ID = <some ID>
    GROUP BY FISH_ID
) hc2
    ON hc2.FISH_ID = hc1.FISH_ID AND
       hc2.MAX_DATE = hc1.DATE
WHERE
    f.ID = <some ID>

更好的方法可能是使用 ROW_NUMBER(),但只有相当新的 H2 版本才支持该方法。