Oracle 仅选择第二条记录

Oracle 仅选择第二条记录,oracle,Oracle,我正在处理一个大型数据集。但为了简化,假设我有这样一个数据集: Name | Age | Hire_Date | Manager --------------------------------------- Bob | 24 | 01/01/2016 | Mark Sue | 31 | 01/01/2014 | Fred Mark | 37 | 01/01/2011 | Dawn <---- Mark | 37 | 01/01

我正在处理一个大型数据集。但为了简化,假设我有这样一个数据集:

Name  |  Age  |  Hire_Date  |  Manager
---------------------------------------
Bob   |  24   | 01/01/2016  |  Mark
Sue   |  31   | 01/01/2014  |  Fred
Mark  |  37   | 01/01/2011  |  Dawn  <----
Mark  |  37   | 01/01/2011  |  Cindy <----
Jean  |  29   | 01/01/2015  |  Larry
Arron |  47   | 01/01/2004  |  Todd
我在第3行和第4行旁边放了箭头,以显示需要隔离的内容。注意马克的经理是如何从黎明变成辛迪的。我想选择此数据集,但只选择与Mark对应的两条记录中的一条。我想选择第二个,经理是辛迪


我的数据集相当大,这种情况只发生过几次,其中有两条类似于上面的记录,只需要选择第二条记录。在Oracle中,是否有任何方法可以做到这一点,并且只选择示例中两条记录中的第二条,并包括其余的常规记录

假设有其他信息:

select d.Name, d.Age, d.Hire_Date, max(ManagerId)
from mydata d
group by d.Name, d.Age, d.Hire_Date
更具体地说,您可能希望加入一个具有日期字段的表,该字段显示该员工被分配给该经理的时间,然后您只需使用分配日期的最大值

不管怎样,都需要更多的信息

编辑: 你肯定需要更多的信息。至少,您需要一个日期字段,指示经理何时成为员工的经理。对于Mark的两行,Cindy的经理生效日期字段将晚于Dawn

select * from table A , table B
where A.name = B.name  -- add extra conditions to match if you need
and  A.rowid >= B.rowid 

上述措施应该有效;但我们需要知道你为什么需要它。此外,我还需要知道,如果某项内容重复两次以上,您是否需要它。

是什么使第3行成为第一条记录,第4行成为第二条记录?其他列中没有区分它们的内容。您的数据中是否还有其他您没有显示的内容?或者这是一个随机的选择,从这两个选择中任选一个?不,我无法注意到马克的经理是如何从Dawn变为Cindy的——根据您显示的数据,这也可能是从Cindy变为Dawn的。@mathguy,这两条记录完全相同,只是第一条记录中的经理名为Dawn,第二条记录中的经理名为Cindy。经理的名字使他们与众不同。这不是一个随机的选择。第二张唱片是最新的,所以我会取代第一张。换句话说,辛迪好,道恩坏。非常直截了当。堆组织表中的行本质上是无序的。没有ORDERBY子句,就没有第一行或第二行。但似乎没有什么可以用来排序结果,说辛迪排在黎明排之后。如果是这样的话,这个问题就无法得到一般性的回答。第二条记录是最新的——但是什么让它更新呢?这两行之间没有任何顺序。你有没有另一个专栏没有显示经理什么时候换的?OP已经问了这个问题,并且不想提供更多信息就离开了。我认为他是按小时计费的,负责几个项目。这个答案基本上删除了经理姓名字段。这可以解决问题,但我需要保留“经理姓名”字段。@Zolt-你错过了我说需要更多信息的部分了吗?但是,是的,需要更多的信息。您需要在manager表中链接。。。你可以在那里取名字,在取ID的最大值之后,或者你需要考虑Math家伙的评论,在那里他问是什么使一行成为第二选择。您还可以使用GROUPBY子句,然后根据某个datetime字段执行子查询以获取最大值,或者whatever@Zolt-我想知道这是怎么回事?b桌是从哪里来的?只有一个表假设稍后插入的行具有更大的rowid,这是一个相当有问题的假设。后面的行可能有较大的rowid,也可能有较小的rowid.Zolt,两者都是相同的表。试着告诉我,请阅读甲骨文手册。没有什么比得上“后一行”。Zolt,两者都是同一个表。保持A&B原样就行了。将单词“table”更改为表名。然后在这里评论它是否有效。请阅读什么是相关查询、自连接、etc等,然后再试一次。然后提问、交叉提问、跟进问题等。