2012-05-10 11 views
0

如果有人能够帮助我,那将会很棒。我是SQL新手。 这就是我的表中的数据是SQL Reports - 根据与其相邻的另一列中提到的日期对列进行排序

表名:EMP

e_no e_name  e_jobrole  position promotion_date 
1 Robin Sales   CEO 01/01/2012 
1 Robin Sales   CFO 20/01/2010 
2 Jackman Sales - S1 EMP 01/04/2009 
4 Sheldon Marketing MGR 15/08/2012 
4 Sheldon Marketing SNRMGR 01/01/2011 
4 Sheldon Marketing MGR 01/01/2011 
3 Arnold Marketing CEO 09/09/2009 
5 Emmy Marketing SNRMGR 08/08/2008 
6 Penny Admin   SNRMGR 05/05/2012 
6 Penny Admin   MGR 09/09/2007 

通过通过之日起这些家伙促进订货,我需要捕捉由雇员和相邻于当前位置保持原来的位置。这可能吗 ?

下面是我需要的输出

e_no e_name e_job prev_pos curr_pos promotion_date 1罗宾销售CFO CEO 01/01/2012 2杰克曼销售 - S1不可用EMP 01/04/2009 4谢尔顿营销MGR MGR 15/08/2012 3阿诺德营销不可CEO 09/09/2009 5艾美奖营销不可SNRMGR 08/08/2008 6便士联系MGR SNRMGR 05/05/2012

+0

什么RDBMS? SQL Server,MySQL,PGSQL? – JNK

+0

我认为你的问题没有明确定义,因为员工(谢尔登)可以同时拥有两个e_jobrole值。如果谢尔顿晋升为副总裁,因此又增加了一行(4,谢尔顿,市场营销副总裁,2012年6月1日),您期望的输出是什么?在这种情况下,谢尔顿不会只有一个以前的工作。 –

+0

@Nav [This sqlfiddle](http://sqlfiddle.com/#!1/6f555/30)可能有助于谁试图解决这个问题。我没有管理自己:/ –

回答

0

编辑:我似乎在发布后几秒内证明是错误的:P

我不认为你可以在一个查询中做到这一点(除了使用复杂的存储过程)。

如何将数据导入应用程序(使用Java或任何您想要的方式),然后解析最旧数据中的数据,并跟踪每位员工的“以前的职位”。然后,每当你找到一个你已经有了“上一个位置”的人时,你可以将它插入到表格中,并更新“之前的位置”(如果你以前没有见过她,请设置“上一个位置” “为空/”无“/”“/等)。

这是否有用,还是必须全部在数据库上完成?

+0

非常感谢您的评论。基本上我试图通过SSRS创建基于这些数据的报告。所以我打算单独使用数据库来提取所需的数据。 – Kennobie

0

像这样的东西应该工作。 WHERE和HAVING的组合可能需要进行一些调整。

select 
    c.e_no, 
    c.e_name, 
    c.e_job, 
    p.position as prev_position, 
    c.position as curr_position, 
    c.promotion_date 
from 
    emp c 
inner join 
    emp p 
on 
    c.e_no=p.e_no 
group by 
    c.e_no, 
    c.e_name, 
    c.e_job, 
    p.position as prev_position, 
    c.position as curr_position, 
where 
    p.promotion_date < c.promotion_date 
having 
    max(p.promotion_date), 
    max(c.promotion_date) 
相关问题