SELECT包含最新值的行

时间:2017-01-25 18:40:42

标签: sql tsql select

如何选择具有最新日期的column2并且不为null的collumn1注册表?

例如,我只需返回第五行(employee3)。

enter image description here

2 个答案:

答案 0 :(得分:2)

这个怎么样?

SELECT Employee, MAX(Resignation) Resignation
  FROM table
 WHERE Resignation IS NOT NULL
 GROUP BY Employee

或者,如果您的表格列数超出了您的显示范围,

 SELECT a.*
   FROM table a
   JOIN (
              SELECT Employee, MAX(Resignation) Resignation
                FROM table
               WHERE Resignation IS NOT NULL
               GROUP BY Employee
        ) b ON a.Employee = b.Employee AND a.Resigation = b.Resignation

这是"查找具有极值的详细信息行"查询模式。

答案 1 :(得分:0)

更新了对问题的重新解释:

我认为你的意思是:

返回当前已辞职的所有员工的最近辞职日期。目前已辞职的定义为"具有所有相同的员工记录,并为该员工填写辞职日期"。具有NULL辞职日期的单个员工记录表示员工仍然受雇;无论他们多少次辞职!

这可以使用exists correlated subquery来完成。 和max以及group by

首先,我们会列出所有未辞职的员工。 然后我们将我们的全套资料与未辞职的员工进行比较,只保留员工不在未辞职的员工名单中,接下来我们按员工分组并获得最大辞职。

SELECT Employee, Max(Resignation) Resignation
FROM Table A
WHERE NOT EXISTS (SELECT 1 
                  FROM Table B
                  WHERE A.Employee = B.Employee
                    and B.Resignation is null)  --Cooelation occurs here Notice how A
GROUP BY Employee

Coolation在WHERE A.Employee = B.Employee行发生,因为A.EMPLOYEE指的是从TABLE A移除table B一级的表格。

非常确定有一种方法可以通过apply join进行此操作;但我还不熟悉那种语法。