1 つの方法は、クエリを使用して返される週のセットを取得し、そのクエリを結合可能なインライン ビューとして使用することです。
このようなもの:
SELECT t.*
FROM (SELECT s.week FROM tab s GROUP BY s.week ORDER BY s.week DESC LIMIT 3) r
JOIN tab t
ON t.week = r.week
インライン ビュー (エイリアスr
) は、テーブル内の N 個の最新の週の値のリストを取得します。(これは、整数の場合と同様に、週の列がソート可能であることを前提としています。
これはテーブルに結合され、ON 句を使用して、テーブルから返される行を、インライン ビューによって返される週の値と一致する週の値を持つ行に制限します。
注:列のインデックスは、week
行数が多く、列のカーディナリティが高い場合に、パフォーマンスが大幅に向上する場合がありweek
ます。
注:大規模なテーブルでは、次の例のように、JOIN 操作を実行する場合とIN (subquery)
述語を使用する場合でパフォーマンスが異なる場合があります。ほとんどの大規模なセットと私が行うクエリでは、通常、JOIN のパフォーマンスが向上することがわかりました。ただし、両方をテストして、どちらのパフォーマンスが優れているかを確認することをお勧めします。(小さなテーブルでは、どちらの方法でもあまり問題になりません。非常に大きなテーブルでは、パフォーマンスの違いが顕著になります。)
SELECT t.*
FROM tab t
WHERE t.week
IN (SELECT s.week FROM tab s GROUP BY s.week ORDER BY s.week DESC LIMIT 3) r