SQLServerで直近の日付のランキングを条件別で取

Writer: admin Type: regalmach Date: 2019-01-08 00:00
SQLServerで直近の日付のランキングを条件別で取得したいです。例えば次のように、Aテーブルにデータが入っているとします。*** Aテーブル ***================| ID | 日付 | ポイント || 001 | 7/09 | 1001 |…| 001 | 7/10 | 1001 || 002 | 7/10 | 1002 || 003 | 7/10 | 1003 |…| 050 | 7/10 | 1050 |…| 099 | 7/10 | 1099 || 100 | 7/10 | 1100 |このテーブルから次のようなデータを取り出した場合、①直近の日付のみを抽出し②ポイント降順で順位付け(同順位あり)③IDがログインしたIDと同じ場合は、自己IDの前後50位を抽出、 ログインIDが含まれない場合は1位~50位を抽出結果は、A. 自己IDが仮に[200]として該当しない場合(上位50位を抽出)| ID | 日付 | ポイント | 順位 || 100 | 7/10 | 1100 | 1 || 099 | 7/10 | 1099 | 2 |…| 050 | 7/10 | 1050 | 50 |上記のように1位~50位を表示B. 自己IDが[050]の場合(自順位を中心として均等に前後25位づつ抽出)| ID | 日付 | ポイント | 順位 || 075 | 7/10 | 1100 | 25 |…| 050 | 7/10 | 1050 | 50 | << 自分…| 025 | 7/10 | 1025 | 75 |上記のように25位~75位を表示C. 自己IDが[002]の場合(自順位を境に前+後合わせて50位抽出)| ID | 日付 | ポイント | 順位 || 050 | 7/10 | 1050 | 50 || 051 | 7/10 | 1051 | 51 |…| 002 | 7/10 | 1050 | 99 | << 自分| 001 | 7/10 | 1025 | 100 |上記のように、自分を含むが下位99位の場合50位~100位を表示同じく上位10位の場合は、1位~50位を表示以上のようになります。1ラインで書きたいのですが、実現可能でしょうか?ご教授お願いいたします。共感した0###SELECT *,RANK() OVER( ORDER BY ポイント DESC ) RNKFROM AテーブルWHERE 日付 = ( SELECT MAX(日付) FROM Aテーブル ) まではわりとかんたんですけど。> ③IDがログインしたIDと同じ場合は、自己IDの前後50位を抽出、> ログインIDが含まれない場合は1位~50位を抽出でいきなり複雑に。後者だけならWITH Q AS (SEKECT *,SELECT RANK() OVER( ORDER BY ポイント DESC ) RNKFROM AテーブルWHERE 日付 = ( SELECT MAX(日付) FROM Aテーブル ) ) SELECT * FROM QWHERE RNK <= 50でいいのですが前者を含めるとめんどくさすぎる。同じ日付の行数が大きくないならアプリケーションプログラム側で処理したほうが楽だと思います。ナイス0
###この質問は投票によってベストアンサーに選ばれました!

 

TAG