2016-06-27 7 views
-1

私は与えられた値に最も近いものを取得するSQLクエリを作成しようとしています。ユーザが入力8000を与えたときに、 8000に1つのレコード、8000に等しい1つのレコードと8000よりも1つ上のレコードです。データモデルを設計する最良の方法は何ですか、この操作を行うためにSQLを作成するには、パフォーマンスを得るために、アドバイスをしてください。DataBaseから与えられた入力に最も近い値を取得する方法

これは、従業員テーブル

Name | salary 
---------- 
Raju   5000 
Ram   8000 
Sulthan  7000 
Aditya  10,000 
のサンプルデータであり、この従業員がテーブル名と名前である実施例以下、給与その属性

テーブル従業員(名テキスト、給与整数)を作成している

を検討

私が上に説明したように、私が給与を8000と入力した場合、8000に最も近いレコードを1つ、8000に1つのレコードを、8000より1レベル高いレコードを1つフェッチしたいと考えます。

+0

[編集]あなたの質問とそれらを組み合わせることです'create table'文として)、いくつかのサンプルデータと期待される出力 –

+0

質問を編集しました – user3860047

答えて

0

あなたは窓関数でこれを行うことができます。

select name, salary 
from (
    select name, 
     salary, 
     case 
      when salary = 8000 then 1 
      when lag(salary) over w = 8000 then 1 
      when lead(salary) over w = 8000 then 1 
      else 0 
     end as flag 
    from employee 
    window w as (order by salary) 
) t 
where flag = 1; 

別のオプションは、(テーブルの定義を追加3つのクエリを使用してUNION ALL

select name, salary 
from employee 
where salary = 8000 
union all 
select * 
from (
    -- get the highest salary that is lower then 8000 
    select name, salary 
    from employee 
    where salary < 8000 
    order by salary desc 
    limit 1 
) t 
union all 
select * 
from (
    -- get the smallest salary that is higher then 8000 
    select name, salary 
    from employee 
    where salary > 8000 
    order by salary 
    limit 1 
) t 
order by salary; 
+0

解決策を提供してくれてありがとう.. :) – user3860047

関連する問題