2016-05-17 54 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)