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 版本才支持该方法。
我有一个 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 版本才支持该方法。