我有一个我正在使用的大型数据集。但为了简化,假设我有一个这样的数据集:
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的经理如何从Dawn变为Cindy。我想选择此数据集,但只选择与Mark对应的两个记录中的一个。我想选择第二个,经理是Cindy。
我的数据集非常大,这种情况只发生几次,其中有两个记录如上,只需要选择第二个记录。有没有办法在Oracle中执行此操作,并且仅在示例情况下选择两个记录中的第二个,并包括其他常规记录?
答案 0 :(得分:0)
假设还有其他信息:
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。
答案 1 :(得分:0)
select * from table A , table B
where A.name = B.name -- add extra conditions to match if you need
and A.rowid >= B.rowid
以上情况应该有效;但我们需要知道你为什么需要它。同样,我需要知道是否需要重复两次以上的事情。