【发布时间】:2012-06-02 21:44:12
【问题描述】:
我有一个员工表,其中包含 emp_id、firstname、lastname、region_id、status 和 Effective_date 等列。
员工表可以为同一员工有多个具有不同生效日期和状态的条目。
员工可以有两种状态“离职者”和“入职者”。
id emp_id firstname region status effective_date
1 1 James Asia Joiner 1-Jan-2012
2 1 James UK Leaver 1-Aug-2012
3 1 James USA Joiner 1-Aug-2012
4 1 James Asia Leaver 1-May-2012
5 1 James UK Joiner 1-May-2012
6 1 James USA Leaver 1-Sep-2012
根据员工表中的上述数据,如果我想获取 2012 年 1 月 1 日的最新记录,我会得到 id = 1 的记录,
如果我想获得詹姆斯在 2012 年 5 月 1 日的最新记录,我将获得 id = 5 的记录
如果我想获得詹姆斯 2012 年 8 月 1 日的最新记录,我将获得 id = 3 的记录,
如果我想获得詹姆斯 2012 年 9 月 1 日的最新记录,我将获得 id = 6 的记录
以下查询正确给了我最新记录
SELECT
emp_id,
MAX(effective_date) AS latest_effective_date
FROM
EMPLOYEE
GROUP BY
emp_id
但是我如何获取其他列,例如 firstname 、 region 等。
如果我将它们放在 select 子句或 group by 子句中,我不仅会得到最新的记录,还会得到其他记录。
【问题讨论】:
-
你能解释一下吗? “如果我想获得詹姆斯 2012 年 8 月 1 日的最新记录,我会获得 id = 3 的记录”为什么不是 2?
-
@Sebas。当然,詹姆斯将于 2012 年 8 月 1 日从英国地区搬到美国。所以,如果我需要查看 2012 年 8 月 1 日詹姆斯在哪里,它必须返回美国而不是英国。因此 id = 3 而不是 id = 2 的记录。
-
那么您的整个逻辑将被审查,您自己的查询只是偶然返回“正确的最后一条记录”。我现在离开这个话题,你有分析问题要解决。