我想知道如何將剩餘的表連接到自身或使用case語句在視圖中分配最大值。說我有如下表:根據最大值加入
Lastname Firstname Filename
Smith John 001
Smith John 002
Smith Anna 003
Smith Anna 004
我想創建列出所有值的觀點,但也有顯示當前行是否是最大行的另一列,如:
Lastname Firstname Filename Max_Filename
Smith John 001 NULL
Smith John 002 002
Smith Anna 003 NULL
Smith Anna 004 NULL
這可能嗎?我曾嘗試以下查詢:
SELECT Lastname, Firstname, Filename, CASE WHEN Filename = MAX(FileName)
THEN Filename ELSE NULL END AS Max_Filename
但我被告知姓氏不在group by子句中。但是,如果我將Lastname,firstname,filename分組,則max_filename中的所有內容都與文件名相同。
你能幫我理解我做錯了什麼,以及如何使這個查詢工作?
第二次你用更優雅的解決方案打敗我。我敢肯定,不會是最後一次。 雖然我有一個問題:你的查詢有更復雜的執行計劃並且運行速度較慢(儘管這可能取決於數據,索引 - 我沒有做太多的測試)。這是預期的嗎? – Szymon
你怎麼能說這些@Szymon?除非一切都在索引中,否則兩個查詢都必須全面掃描表;你的查詢將不得不在firstname,lastname上進行第二次掃描(假設它已被編入索引),所以應該可能有更復雜的執行計劃並且運行速度更慢。 – Ben
好吧,還沒有檢查過執行計劃,但實際上我確信你的查詢中的兩個掃描(或尋找)應該比我的掃描慢。你有sqlfiddle的例子嗎? –