【发布时间】:2017-06-11 01:55:24
【问题描述】:
【问题讨论】:
【问题讨论】:
这个怎么样?
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
这是“查找具有极值的详细信息行”查询模式。
【讨论】:
更新了对问题的重新解释:
我想你的意思是:
返回当前已辞职的所有员工的最近辞职日期。目前辞职的定义是“拥有所有相同的员工记录,并为该员工填写了辞职日期”。离职日期为 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
由于 A.EMPLOYEE 引用从table B 中删除了一级表TABLE A,因此在WHERE A.Employee = B.Employee 行上发生了冷却。
很确定也有一种方法可以通过应用连接来做到这一点;但我还不太熟悉那种语法。
【讨论】: