我有一個表 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
我想選擇一條魚并只回傳最近的 HEALTHCHECK。
我試過用以下方法模擬這個答案:
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
);
但它的語法不正確,我只想回傳特定的魚(fish.id=x)。
我將如何從最新的選定欄位中回傳一條魚Health Check?
資料庫是H2。
uj5u.com熱心網友回復:
我會在這里使用純連接版本:
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 版本支持它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/458871.html
上一篇:比AND運算子有效的查詢
