0

如果有人可以帮助我,那就太好了。我是 SQL 新手。这就是我的表格数据

表名: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 Robin Sales CFO CEO 01/01/2012 2 Jackman Sales - S1 不可用 EMP 01/04/2009 4 Sheldon Marketing MGR MGR 15/08/2012 3 Arnold Marketing 不可用 CEO 09/09/2009 5 Emmy Marketing 不可用 SNRMGR 08/08/2008 6 Penny Admin MGR SNRMGR 05/05/2012

4

2 回答 2

0

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

我认为您不能在一个查询中做到这一点(使用复杂的存储过程除外)。

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

那会有用吗,还是必须全部在数据库上完成?

于 2012-05-10T15:53:48.370 回答
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)
于 2012-05-10T15:53:58.980 回答