2016-05-17 2 views
0

したがって、caseステートメントでは、When条件を満たす最後のエントリを取得する方法があります。条件を満たしてその最初のエントリので 、上記構成されたデータは、SQL Serverます常に出力2016年7月28日で、この今複数のエンタープライズが条件を満たす場合の結果を整列する

Case when hireDate > getDate() THEN hireDate END; 

ID   HireDate 
101    '07-28-2016' 
101    '08-02-2016' 
101    '08-04-2016' 

考えてみましょう。 08-04-2016のように、このケースstmtで最新の雇用日を取得する方法はありますか?

+1

あなたはおそらくあなたのクエリ全体を表示する必要がありますが、これはで使用されている場合'order by'節では、いつも最後に' desc'を追加することができます。 – sgeddes

+0

_ "SQL Serverは常に07-28-2016を出力します。その理由は、最初のエントリが条件" _を満たしていないためです。 IDでグループ化し、最新の 'HireDate'で1つのレコードだけを選択したいとしますか? –

+0

@sgeddes。このcase文はビューの定義で使用されるので、実際には順序を入れません。 –

答えて

2

ここconditional aggregationを使用して1つのオプションです:

alter view XYZ as 
select id, max(case when hireDate > getDate() then hireDate end) maxdate 
from abc 
group by id 
+0

私はこの最大のsolutuionが好きです – TheGameiswar

0

caseステートメントでは、When条件を満たす最後のエントリを取得する方法があります。

あなたは、グループごとに最大値を取得し、それに対して照会するようなことをすることができます。代わりにCASE式の

;with cte 
as 
(
select id,max(date) as hiredate 
from yourtable 
group by id 
) 
select 
id, 
case when hiredate>getdate() then hiredate else null end as 'hiredate' 
from cte 
0

、サブクエリを使用します。

(SELECT MAX(hiredate) FROM MyTable t2 WHERE hiredate > GetDate() AND t2.PKColumn = MyTable.PKColumn)