2017-02-15 2 views
0

У меня есть требование, когда из представления необходимо получить результат в определенном порядке сортировки. Вот пример таблицы:Данные для заказа с использованием sql

Figure 1 and 2

Теперь данные должны организовать в убывающем порядке на основе последнего дня BASE_PERCENTAGE. Итак, последний день - 04-фев-2017, а самый высокий - самый низкий - Джесси, Рики, Джамми и Жасмин. Конечный результат должен содержать данные на основе BASE_PERCENTAGE, CURR_DATE и Name. Like This-

Может кто-то, пожалуйста, помогите, как получить тот же результат, используя sql. Как sql можно записать на то, что он дает тот же результат.

Пожалуйста, дайте мне знать, если вам нужно больше объяснений.

В приложении Table_View_sql.sql имеется таблица create, Sample Data Insert и View create. View предоставит данные с BASE_Percentage.

Table View Script

+0

Я не очень понимаю .... вы хотите заказ DESc для 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

Привет @ 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 

Обратите внимание, что заказ вы просили означает, что если Алисе и Бобу оба имели один и тот же LastDayBase значение, то вы получите следующий порядок ALICE Feb4, Боб Feb4, Алиса Feb3, Боб Feb3 и т.д. Если вы хотите дней за данное имя, чтобы быть всегда вместе, вы должны использовать

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

+0

Отлично. вы sql даете желаемый результат. Я нашел другое решение, используя функцию FIRST_VALUE. –

Смежные вопросы