2016-05-17 53 views
0

因此,case語句有一種方法來獲取滿足When條件的最後一個條目。 上述由數據考慮這個多個輸入滿足條件的情況下排序的結果

Case when hireDate > getDate() THEN hireDate END; 

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

現在,SQL Server將始終輸出2016年7月28日,因爲它滿足條件的第一項。有沒有一種方法可以獲得這種情況下的最新僱用日期,如08-04-2016。

+1

你或許應該表現出你的整個查詢,但如果這是在使用一個'order by'子句,你總是可以在最後加上'desc'。 – sgeddes

+0

_「SQL服務器將始終輸出07-28-2016,因爲它的第一個條目滿足條件」_不與您的查詢。你想按ID分組,並選擇最新的'HireDate'只有一個記錄? –

+0

@sgeddes。這個case語句被用在一個視圖的定義中,所以不能真正地做出一個命令。 –

回答

2

下面是使用conditional aggregation一個選項:

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

我喜歡這個max solutuion – TheGameiswar

0

所以在case語句中有一種方法可以獲得滿足When條件的最後一個條目。

你可以做一些事情,例如每個組獲得最大值並且對它進行查詢。

;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

而是一個CASE表達式,使用子查詢:

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