2016-10-27 2 views
2

私は、金銭的な閾値を担当する個人のリストを持つテーブルを持っています。私は私が次に高いしきい値のための個別の名前を返すことができselect文を作るしようとしています一連の値の中で次に高いデータ要素を選択してください。

John Smith 5000.00 
Carla Smith 3000.00 
Anna Smith 1000.00 

:ように表Thresholdsに見えます。だから私は1500.00のための注文があります。値がアンナの上にあるので、私はカーラの名前を返すが、私はオプションとしてジョンを見たくない。

お勧めですか?

+0

あなたは、テーブルのより多くを提供することができます例(行と列)と例期待される出力の? – StingyJack

+0

はい、申し訳ありませんが、スペースを使用して私の投稿をきれいに見せるようにしましたが、明らかに私より賢いです! –

+0

はい、申し訳ありませんが、スペースを使用して私の投稿をよりきれいに見せるようにしましたが、明らかに私より賢いです! [名前を付けてエスケープする] From dbo.ThresholdLimits T JOIN dbo.Orders O T.Company = O.Company WHERE O.Company = 'Corp' AND T.Limit> O.Amount ここで私は私のWHERE節を続行していない。金額= 1500.00、ユーザーの上限は1000.00です。 SELECTは次の最高ユーザーの名前を返します。例Annaには1000の制限があり、注文は1500です。次の最高の許可ユーザーはCarlaであり、制限は3000です。 –

答えて

1
Declare @YourTable table (Name varchar(50),SomeValue int) 
Insert Into @YourTable values 
('John Smith',5000), 
('Carla Smith',3000), 
('Anna Smith',1000) 

;with cte as (
    Select *,RN=Row_Number() over (Order by SomeValue) 
    From @YourTable 
    Where SomeValue >= 1500 
) 
Select * from cte where RN=1 

戻り

Name  SomeValue RN 
Carla Smith 3000  1 

それとも@JamesがTOPを使用する(同数の場合には)

;with cte as (
    Select *,Rnk=Dense_Rank() over (Order by SomeValue) 
    From @YourTable 
    Where SomeValue >= 1500 
) 
Select * from cte where Rnk=1 
+0

dense_rank()を使用する方が良いRow_Number()を使用すると、結びつくことができます。 – James

+0

@Jamesおそらく、ティアを設定している場合、重複しない傾向があります。寒いのためにチキンスープのように...傷つけることはできませんでした。 :) –

+0

@ジェームズあなたの提案を含む –

0

を示唆している:

Select top 1 * from table Where value >= 1500 order by value 
関連する問題