2017-02-15 62 views
0

我有一個要求,從一個視圖需要得到一個特定的排序順序的結果。下面是示例表:使用sql訂購數據

Figure 1 and 2

現在數據在降序基礎上,最後一天BASE_PERCENTAGE以便安排。所以最後一天是2017年2月4日,最高和最低順序是傑西,瑞奇,賈米和茉莉。最終輸出應該根據BASE_PERCENTAGE,CURR_DATE和Name來安排數據。像這樣 -

可能有人請幫助如何使用sql獲得相同的結果。如何寫入sql可以得到相同的結果。

如果您需要更多解釋,請讓我知道。

附加Table_View_sql.sql具有表創建,示例數據插入和視圖創建。查看將使用BASE_Percentage提供數據。

Table View Script

+0

我真的不明白....你想倒序對於BASE_PERCENTAGE,CURR_DATE和NAME?如果是這樣,如果你通過CURR_DATE,NAME,BASE_PERCENTAGE desc命令你的輸出是什麼? – Kostis

+0

http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-question/285557#285557 –

+0

Hi @Kostis如果你仔細看到輸出結果,你就會明白。第一最大基地百分比必須找出。比最大值顯示所有日期的所有行。同樣它會繼續。 –

回答

0

你需要能夠告訴每個排什麼的最近日期base_percentage是,如果你希望能夠通過它來進行排序。一種方法是這樣的。您不需要在選擇輸出中保留LD.LastDayBase,我添加了它,以便您可以在測試時輕鬆查看該值。

如果您知道@LastDay是什麼,您可以將它傳遞給查詢並跳過第一行。

DECLARE @LastDay date = (select MAX(Curr_Date) from v_DailyDetails); 

SELECT VD.*, LD.LastDayBase 
FROM v_DailyDetails VD 
    LEFT OUTER JOIN 
    (
     Select Name, BASE_PERCENTAGE LastDayBase 
     From v_DailyDetails VD 
     Where CURR_DATE = @LastDay 
    ) LD on LD.Name = VD.Name 

ORDER BY LD.LastDayBase DESC, VD.CURR_DATE DESC, LD.NAME 

請注意,您所要求的訂單意味着如果Alice和Bob都具有相同的LastDayBase值,那麼你會得到下面的順序ALICE Feb4,鮑勃Feb4,愛麗絲Feb3,鮑勃Feb3等,如果你想天對於一個給定的名字是永遠在一起,你應該使用

ORDER BY LD.LastDayBase DESC,LD.NAME,VD.CURR_DATE DESC

+0

太好了。你的sql是給出所需的輸出。我發現了另一個使用FIRST_VALUE函數的解決方案。 –