以下のクエリを使用して、profile_run_key の上位 2 つのレコードを取得しています。これを行うために、ほぼ同様の 3 つのクエリを使用しています。これは、「where」句のためにテーブルを 3 回トラバースしていることを意味します。したがって、これは実行に 3(n) 時間かかると思います。または、「Order by」を使用できますが、実行には nlogn 時間がかかります。
SELECT name, weighted_average
FROM idp_weighted_avg
where (profile_run_key =
(SELECT MAX (profile_run_key)
FROM idp_weighted_avg
WHERE SCORECARD_IDENTIFIER = 'U:D8yIYvW6EeGKyklcM7Co1A')
OR profile_run_key =
(SELECT MAX (profile_run_key)
FROM idp_weighted_avg
WHERE SCORECARD_IDENTIFIER = 'U:D8yIYvW6EeGKyklcM7Co1A'
AND profile_run_key <
(SELECT MAX (profile_run_key)
FROM idp_weighted_avg
WHERE SCORECARD_IDENTIFIER =
'U:D8yIYvW6EeGKyklcM7Co1A')))
以下のサブクエリの結果を再利用できるかどうか疑問に思っていました (一時テーブルを作成したくありません)。代替案はありますか?推測?
SELECT MAX (profile_run_key)
FROM idp_weighted_avg
WHERE SCORECARD_IDENTIFIER = 'U:D8yIYvW6EeGKyklcM7Co1A'