Oracle 如何从具有多个id匹配的最大日期的行中选择值

Oracle 如何从具有多个id匹配的最大日期的行中选择值,oracle,Oracle,我不确定我的头衔是否能让我问的问题很清楚。我正在使用SQL开发人员查询Oracle数据库。我已经构建了下面的查询,该查询能够提取一个特定ID所需的值。我需要一个查询,该查询将提取相同的值,但用于多个ID。我需要每月为一组不同的20-50个ID运行相同的查询。数据库包含80000多个ID,因此如果可以避免的话,我不想提取所有内容。这可能吗 SELECT b.id, a.final_grade, a.final_score FROM db.table1 a, db.table2 b where a.

我不确定我的头衔是否能让我问的问题很清楚。我正在使用SQL开发人员查询Oracle数据库。我已经构建了下面的查询,该查询能够提取一个特定ID所需的值。我需要一个查询,该查询将提取相同的值,但用于多个ID。我需要每月为一组不同的20-50个ID运行相同的查询。数据库包含80000多个ID,因此如果可以避免的话,我不想提取所有内容。这可能吗

SELECT b.id, a.final_grade, a.final_score
FROM db.table1 a, db.table2 b
where a.survey_id=b.survey_id
and b.id = '1796'
and a.created_dt = (select max (a.created_dt) from db.table1 a, db.table2 b 
where a.survey_id=b.survey_id and b.cp_id = '1796')
非常感谢你的帮助

  SELECT b.id, a.final_grade, a.final_score
    FROM db.table1 a, db.table2 outerb
    where a.survey_id=outerb.survey_id
    and outerb.id IN (<SELECT query with your list of ids>)
    and a.created_dt = (select max (a.created_dt) from db.table1 a, db.table2 b 
    where a.survey_id=b.survey_id and b.cp_id = outerb.id )

这就是你要找的吗?问题不清楚

最简单的方法是使用行号和WITH子句

with data as 
SELECT 
      b.id, 
      a.final_grade, 
       a.final_score,
       ROW_NUMBER OVER (PARTITION BY b.id, order by a.created_dt desc) rn
FROM 
        db.table1 a
        INNER JOIN  db.table2 b
        ON  a.survey_id=b.survey_id

where
 b.id in (<Comma seperated list of ids>)
)

SELECT * FROM DATA WHERE rn = 1

注意:如果为给定id创建的_dt存在关联,则将选择任意行。如果您希望显示领带,请将行号替换为秩,我认为这就是您要寻找的,或者至少这是我从您的解释中得到的:

SELECT b.id, a.final_grade, a.final_score
    FROM db.table1 a, db.table2 b
    where a.survey_id=b.survey_id
    and b.id IN (<SELECT query with your list of ids>)
    and a.created_dt **IN** (select max (a.created_dt) from db.table1 a, db.table2 b 
    where a.survey_id=b.survey_id and b.cp_id = b.id )

请注意,b的别名为两次。在主选项中选择一次,然后在子选项中再次选择。你认为哪一个b应该被引用,b.cp_id=b.idI恐怕这不会给我带来任何结果。如果我的问题不准确导致混乱,我道歉。对不起,我的问题不清楚。数据库中的每个id每年都会被赋予一个新的等级和一个新的分数。为每个id分配的新等级/分数的数据各不相同。我希望为一组特定的id选择最近的等级和分数。哦,我发布的查询的最后一行应该是b.id而不是b.cp_id