我遇到了一個問題,我需要從一個表中連接一個唯一鍵,該表在另一個表中有多個匹配鍵,但我只需要每個鍵的最新條目。
當我使用標簽來識別動物時,問題就出現了,但是隨著時間的推移,我需要重新使用標簽。為了解決這個問題,我為每個標簽使用了一個唯一鍵,其中我在動物 ID 中包含了出生年份。
我現在有一些新的錄音,我可以在其中識別每只動物的性別,但只記錄標簽。我需要將標簽與正確的唯一動物標簽相匹配,但是由于大多數標簽都被重復使用,我需要確保我只將標簽與最新版本相匹配,即最近一年中相關標簽的unique_tag 列。
當有多個匹配鍵時,有沒有辦法告訴 SQL 使用哪個條目?
簡化的示例表和當前代碼:
表_a:
| 唯一標簽 |
|---|
| 2020TAG1 |
| 2016TAG2 |
| 2004TAG1 |
| 2001TAG2 |
表_b:
| 標簽 | 樣品日期 | 性別 |
|---|---|---|
| 標簽1 | 2022-02-10 | 米 |
| 標記2 | 2022-02-10 | F |
SELECT unique_tag, table_b.tag, table_b.sample_date, table_b.sex
FROM table_a
INNER JOIN table_b
ON RIGHT(table_a.unique_tag, 4) = table_b.tag;
此代碼會為每個標簽生成多個條目,但是我只需要 unique_tag 中最近一年的條目。
任何建議都非常感謝!
uj5u.com熱心網友回復:
您可以使用ORDER BY sample_date DESC LIMIT 1它給您一個結果,其中 te 日期是最新的。
uj5u.com熱心網友回復:
您可以使用row_number()并獲取每個標簽的標簽年份最大的行:
SELECT unique_tag, tag, sample_date, sex FROM
(SELECT unique_tag, table_b.tag, table_b.sample_date, table_b.sex,
row_number() over(partition by RIGHT(table_a.unique_tag, 4) order by LEFT(table_a.unique_tag, 4) desc) rn
FROM table_a
INNER JOIN table_b
ON RIGHT(table_a.unique_tag, 4) = table_b.tag) t
WHERE rn = 1;
小提琴
uj5u.com熱心網友回復:
您可以使用帶有IN()條件的子查詢:
SELECT unique_tag, table_b.tag, table_b.sample_date, table_b.sex
FROM table_a
INNER JOIN table_b
ON RIGHT(table_a.unique_tag, 4) = table_b.tag
WHERE table_b.tag IN( SELECT tag FROM table_b GROUP BY tag ORDER BY sample_date DESC);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/444085.html
上一篇:從產品到訂單的總價格
下一篇:Unix時間顯示1h,值為空
