Oracle 如何从具有多个id匹配的最大日期的行中选择值
我不确定我的头衔是否能让我问的问题很清楚。我正在使用SQL开发人员查询Oracle数据库。我已经构建了下面的查询,该查询能够提取一个特定ID所需的值。我需要一个查询,该查询将提取相同的值,但用于多个ID。我需要每月为一组不同的20-50个ID运行相同的查询。数据库包含80000多个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.
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