給定TASK_ID,檢索每個文件的最新版本的最有效方法是什麼?檢索給定ID的每個文件名的最新版本的整行
這是我正在使用的示例表。
ID TASK_ID FILENAME VERSION_NUMBER RANDOM_COLUMN
1 1 a.txt 1 112
2 1 b.txt 1 231231
3 1 c.txt 1 234356
4 1 a.txt 2 35
5 1 b.txt 2 84
6 1 b.txt 3 97604
7 2 aa.txt 1 6956
8 2 bb.txt 1 9760054
這是我到目前爲止。
SELECT FILENAME, TASK_ID, MAX(VERSION_NUMBER)
FROM TABLE_NAME
GROUP BY FILENAME, TASK_ID
HAVING TASK_ID = '1';
不幸的是,上面只給我3列我在SELECT語句,而不是整個行並添加更多的列會給我一個錯誤。
FILENAME TASK_ID MAX(VERSION_NUMBER)
a.txt 1 2
b.txt 1 3
c.txt 1 1
我怎麼可能去獲得整個行?
我打算將這個SQL查詢添加到Spring存儲庫中的Query註釋中,並將其作爲本機查詢運行。這是最好的方法嗎?
編輯: 我結束了這個SQL查詢語句,它得到我想要的東西,但我不知道這是否是正確的或效率表現。
SELECT ta.*
FROM TABLE_NAME ta
INNER JOIN (SELECT FILENAME, TASK_ID, MAX(VERSION_NUMBER) vn
FROM TABLE_NAME
GROUP BY FILENAME, TASK_ID
HAVING TASK_ID = '1') sq
ON ta.FILENAME = sq.FILENAME
AND ta.TASK_ID = sq.TASK_ID
AND ta.VERSION_NUMBER = sq.vn;
結果上面的SQL查詢的
ID TASK_ID FILENAME VERSION_NUMBER RANDOM_COLUMN
3 1 c.txt 1 234356
4 1 a.txt 2 35
6 1 b.txt 3 97604
您的查詢的結果包括在結果中SEQNUM。除了將SELECT語句從ta。*改爲ta.ID,ta.TASK_ID,ta.FILENAME等之外,是否還有其他方法不包含它? – dalawh
@dalawh。 。 。只選擇你想要的列。回答問題時,我使用'select *'作爲方便。 –