如果有人能帮我,那就太好了。我是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罗宾销售首席财务官首席执行官2012年1月1日2 Jackman Sales - S1不可用EMP 2009年1月4日4谢尔顿营销经理2012年8月15日3阿诺德营销不可用首席执行官2009年9月9日5艾美奖营销未提供SNRMGR 2008年8月8日6便士管理员SNRMGR 2012年5月5日
发布于 2012-05-10 23:53:48
编辑:我似乎在发帖几秒钟后就被证明是错的:P
我不认为您可以在一个查询中做到这一点(除非使用复杂的存储过程)。
如何将数据放入应用程序(使用Java或您喜欢的任何语言),然后从最旧的数据中解析数据,并跟踪每个员工的“以前的职位”。然后,当你到达一个你已经有一个“上一个位置”的位置时,你可以将它插入到表格中,并更新“上一个位置”(如果你以前没有见过她,将“上一个位置”设置为null/"none"/""/etc)。
这是有用的,还是必须全部在DB上完成?
发布于 2012-05-10 23:53:59
像这样的东西应该行得通。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)https://stackoverflow.com/questions/10537599
复制相似问题