首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从连接表中检索最大(日期)值

从连接表中检索最大(日期)值
EN

Stack Overflow用户
提问于 2016-03-23 21:24:58
回答 3查看 773关注 0票数 0

我需要一个非常基本的SQL连接概念的帮助,我似乎就是搞不懂。

我有一个employee表和一个position表。employee表如下所示:

代码语言:javascript
复制
EmpID   Name
1       Jane Jones
2       Bob Smith
3       Jim Adams

position表如下所示:

代码语言:javascript
复制
PosID   EmpID        Position   DateFilled
1       1            Sales      1/2/2012
2       2            HR         4/5/2013
3       2            Mgmnt      6/1/2014
4       2            Sr. Mgmnt  7/5/2015
5       3            IT Support 4/6/2014
6       3            IT Devel.  5/11/2015

如何获得以下输出:

代码语言:javascript
复制
EmpID   Name        Position    DateFilled
1       Jane Jones  Sales       1/2/2012
2       Bob Smith   Sr. Mgmnt   7/5/2015
3       Jim Adams   IT Devel.   5/11/2015

那么,换句话说,我如何进行连接,以便只从position表中获得具有最大DateFilled列的记录,以便与employee表中的相应记录进行连接?任何帮助都将不胜感激。

EN

回答 3

Stack Overflow用户

发布于 2016-03-23 21:28:24

您可以使用ROW_NUMBER

代码语言:javascript
复制
SELECT e.EmpID, e.Name, p.Position, p.DateFilled
FROM employee e
LEFT JOIN (
   SELECT EmpID, Position, DateFilled,
          ROW_NUMBER() OVER (PARTITION BY EmpID 
                             ORDER BY DateFilled DESC) AS rn        
   FROM position
) p ON e.EmpID = p.EmpID AND p.rn = 1
票数 1
EN

Stack Overflow用户

发布于 2016-03-23 21:33:29

你可以像这样使用MAX() KEEP ( DENSE_RANK [FIRST|LAST] ... )来完成:

代码语言:javascript
复制
SELECT e.EmpId,
       e.Name,
       p.position,
       p.datefilled
FROM   employee e
       INNER JOIN (
         SELECT EmpID,
                MAX( Position ) KEEP ( DENSE_RANK LAST ORDER BY DateFilled ) AS Position,
                MAX( DateFilled ) AS DateFilled
         FROM   position
         GROUP BY EmpID
       ) p
       ON ( e.EmpId = p.EmpID );
票数 1
EN

Stack Overflow用户

发布于 2016-04-04 18:57:55

尝尝这个

代码语言:javascript
复制
 select temp.EmpID,(select position from Position where PosID =temp.PosID) position,DateFilled,Name from 
    (select EmpID,max(PosID) PosID,max(DateFilled) DateFilled 
     from position group by EmpID ) temp
    inner join employee  emp on emp.EmpID =temp.EmpID 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36179445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档