2017-02-15 6 views
0

ビューから特定の並べ替え順序で結果を取得する必要があるという要件があります。ここではサンプルテーブルは次のとおりです。SQLを使用してデータを注文

Figure 1 and 2

今データは、最終日のBASE_PERCENTAGEに基づいて降順に手配しなければなりません。だから最後の日は2017年2月4日で、最下位はJessie、Ricky、Jammie、Jasmineです。最終出力は、BASE_PERCENTAGE、CURR_DATE、およびNameに基づいてデータを整理する必要があります。このように -

誰かがSQLを使用して同じ結果を得る方法を手伝ってもらえますか?どのようにsqlを書いても、同じ結果が得られます。

詳しい説明が必要な場合はお知らせください。

添付Table_View_sql.sqlには、テーブル作成、サンプルデータ挿入、およびビュー作成があります。ビューは、BASE_Percentageでデータを表示します。

Table View Script

+0

は、私は本当に理解していないLD.LastDayBase DESC、LD.NAME、VD.CURR_DATE DESC BY

ORDERを使用する必要があります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-wing-asking-a-question/285557#285557 –

+0

こんにちは@Kostis 、あなたが密接にあなたが理解する出力を参照してください。最初の最大ベースのパーセンテージを調べる必要があります。その最大値よりもすべての日付のすべての行が表示されます。同じようにそれは続きます。 –

答えて

0

あなたはそれでソートできるようにしたい場合は、最新の日付base_percentageが何であるかをすべての行に伝えることができるようにする必要があります。それを行う1つの方法は、このようなものです。 LD.LastDayBaseをselect出力に保持する必要はありません。テスト中に値が何であるかを簡単に確認できるように、追加しました。

@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などを入手することを意味することに注意指定された名前は、常に一緒になるために、あなたはDESC順序をしたいですか....

+0

あなたはSQLは、望ましい出力を与えています。私はFIRST_VALUE関数を使って別の解決策を見つけました。 –

関連する問題