0

私のタイトルが、私が求めている質問を非常に明確にするかどうかはわかりません。SQL Developer を使用して Oracle データベースにクエリを実行しています。特定の ID に必要な値を取得できる以下のクエリを作成しました。複数の ID に対して同じ値を取得するクエリが必要です。20 ~ 50 個の ID のさまざまなセットに対して、毎月同じクエリを実行する必要があります。データベースには 80,000 以上の 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')

助けてくれてどうもありがとう

4

3 に答える 3

1

最も簡単な方法は、ROW_NUMBER() と 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 の created_dt に同点がある場合、任意の行が選択されます。代わりにタイを表示したい場合はROW_NUMBERRANK()

于 2013-06-27T22:00:29.020 に答える