当多个肠子满足条件时的有序结果

时间:2016-05-17 14:25:18

标签: sql sql-server sqlite case

因此,使用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将始终输出07-28-2016,因为它的第一个条目满足条件。有没有办法在这个案例中获得最新的雇佣日期,例如08-04-2016。

3 个答案:

答案 0 :(得分:2)

以下是使用conditional aggregation的一个选项:

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

答案 1 :(得分: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

答案 2 :(得分:0)

使用子查询而不是CASE表达式:

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