Oracle:如何根据上次更新选择列发生更改的表中的行

Oracle:如何根据上次更新选择列发生更改的表中的行,oracle,Oracle,我一直试图表达我的疑问,但似乎无法理解。我试过使用rank,但可能遗漏了什么 以下是超过1个ID的示例数据: ID标题上次更新日期 168生产经理4/2/2016 168产品经理2016年3月28日 168主管2016年2月27日 168主管2016年2月15日 168主管2016年2月2日 168团队负责人1/14/2016 168团队负责人2016年12月1日 168团队负责人2016年10月1日 168主管1/5/2016 168主管1/2/2016 168开发商2015年12月26日 1

我一直试图表达我的疑问,但似乎无法理解。我试过使用rank,但可能遗漏了什么

以下是超过1个ID的示例数据:

ID标题上次更新日期 168生产经理4/2/2016 168产品经理2016年3月28日 168主管2016年2月27日 168主管2016年2月15日 168主管2016年2月2日 168团队负责人1/14/2016 168团队负责人2016年12月1日 168团队负责人2016年10月1日 168主管1/5/2016 168主管1/2/2016 168开发商2015年12月26日 168开发商2015年12月15日

我试图在查询中获取的内容:

168产品经理2016年3月28日 168主管2016年2月2日 168团队负责人2016年10月1日 168主管1/2/2016 168开发商2015年12月15日

非常感谢您的帮助

谢谢

RS

您需要一个子查询: 编辑:未经测试

SELECT DISTINCT * 
FROM table 
WHERE Last_update_date = 
   (SELECT MIN(Last_update_date) 
      FROM table t1 
     WHERE t1.Title = table.Title)
或者:

WITH T1 AS 
    (SELECT Title, MIN(Last_update_date) First_Update
       FROM table 
       GROUP BY Title)
SELECT table.* 
FROM table 
INNER JOIN T1 
  ON T1.First_Update = table.Last_update_date
 AND T1.Title = table.Title
您需要一个子查询: 编辑:未经测试

SELECT DISTINCT * 
FROM table 
WHERE Last_update_date = 
   (SELECT MIN(Last_update_date) 
      FROM table t1 
     WHERE t1.Title = table.Title)
或者:

WITH T1 AS 
    (SELECT Title, MIN(Last_update_date) First_Update
       FROM table 
       GROUP BY Title)
SELECT table.* 
FROM table 
INNER JOIN T1 
  ON T1.First_Update = table.Last_update_date
 AND T1.Title = table.Title

我不认为这里需要分析函数,因为它是一个简单的GROUPBY应用程序

    select    id, title, min(last_update_date)
    from      your_table   --  << -- enter your table name here
    group by  id, title

我不认为这里需要分析函数,因为它是一个简单的GROUPBY应用程序

    select    id, title, min(last_update_date)
    from      your_table   --  << -- enter your table name here
    group by  id, title

出于测试目的,我创建了一个更大的表以包含多个id:

SQL> select * from your_table;

ID         TITLE                          LAST_UPDATE_DATE
---------- ------------------------------ ------------------
168        Prod. Manager                  04/02/2016
168        Prod. Manager                  03/28/2016
168        Supervisor                     02/27/2016
168        Supervisor                     02/15/2016
168        Supervisor                     02/02/2016
168        Team Lead                      01/14/2016
168        Team Lead                      01/12/2016
168        Team Lead                      01/10/2016
168        Supervisor                     01/05/2016
168        Supervisor                     01/02/2016
168        Developer                      12/26/2015
168        Developer                      12/15/2015
230        Supervisor                     03/03/2016
230        Supervisor                     02/23/2016
230        Team Lead                      02/14/2016
230        Team Lead                      02/01/2016
230        Supervisor                     01/03/2016

17 rows selected.
查询:

结果:


说明:此查询与前面的查询非常相似。唯一的困难是对每个id按连续的标题指定进行分组,而不是不考虑时间线按标题进行分组。这是通过计算两个不同分区上行数之差的附加列gp来实现的。这是一种非常普通和基本的技术,但乍一看可能并不明显;它有时被称为tabibitosan方法,有关详细信息,请使用谷歌搜索。

出于测试目的,我创建了一个更大的表,其中包含多个id:

SQL> select * from your_table;

ID         TITLE                          LAST_UPDATE_DATE
---------- ------------------------------ ------------------
168        Prod. Manager                  04/02/2016
168        Prod. Manager                  03/28/2016
168        Supervisor                     02/27/2016
168        Supervisor                     02/15/2016
168        Supervisor                     02/02/2016
168        Team Lead                      01/14/2016
168        Team Lead                      01/12/2016
168        Team Lead                      01/10/2016
168        Supervisor                     01/05/2016
168        Supervisor                     01/02/2016
168        Developer                      12/26/2015
168        Developer                      12/15/2015
230        Supervisor                     03/03/2016
230        Supervisor                     02/23/2016
230        Team Lead                      02/14/2016
230        Team Lead                      02/01/2016
230        Supervisor                     01/03/2016

17 rows selected.
查询:

结果:



说明:此查询与前面的查询非常相似。唯一的困难是对每个id按连续的标题指定进行分组,而不是不考虑时间线按标题进行分组。这是通过计算两个不同分区上行数之差的附加列gp来实现的。这是一种非常普通和基本的技术,但乍一看可能并不明显;它有时被称为tabibitosan方法,谷歌搜索更多信息。

您正在寻找SQL查询,对吗?请展示您尝试过的内容。您好,我最初的查询与mathguy完全一样。但这将只输出3行,因为它是按Id和标题分组的,但其中有最后一个更新日期组件。然后,我开始和军衔打交道,但没有成功。需求看起来很简单,但可以根据需要将其输出。好的,这是一个不同的需求。每次头衔发生变化时,你都要开始计时,即使同一个人过去拥有相同的头衔,但在这段时间里,他们拥有不同的头衔。这是可以做到的,但要复杂一点-在我构建和测试它之后,我会发布我的答案。我希望这可以通过查询而不是编写过程来完成。您正在寻找SQL查询,对吗?请展示您尝试过的内容。您好,我的初始查询与mathguy完全一样。但这将只输出3行,因为它是按Id和标题分组的,但其中有最后一个更新日期组件。然后,我开始和军衔打交道,但没有成功。需求看起来很简单,但可以根据需要将其输出。好的,这是一个不同的需求。每次头衔发生变化时,你都要开始计时,即使同一个人过去拥有相同的头衔,但在这段时间里,他们拥有不同的头衔。这是可以做到的,但要复杂一点——我会在构建和测试它之后发布我的答案。我希望这可以通过查询而不是编写过程来完成。你注意到这个要求了吗?整个表中只有一个ID。我看不出你在哪里加入,也看不到你在哪里按头衔分组。这也意味着您可能未经测试就发布了解决方案。。。是吗?编辑了我的帖子并修复了这个问题嗨,实际上,表中有不止一个Id。谢谢你注意到要求了吗?整个表中只有一个ID。我看不出你在哪里加入,也看不到你在哪里按头衔分组。这也意味着您可能未经测试就发布了解决方案。。。是吗?编辑了我的帖子并修复了这个问题嗨,实际上,表中有不止一个Id。谢谢这是我的初始查询,返回了3行。这是我的初始查询,返回了3行。这里也是一样。这只返回3行。这里也是一样。这只会退回3行。非常感谢。我一直在用不同的方法来获得结果。我试图设置一组Id、标题和日期
但他没能做到。你的查询成功了。非常感谢,非常感谢。我一直在用不同的方法来获得结果。我试图设置一组Id、标题和日期范围,但没能做到。你的查询成功了。非常感谢。