2017-02-15 65 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函数的解决方案。 –