このガイドでは、日付に基づいてテーブルから最新のレコードを選択するために使用できるさまざまな方法とテクニックについて説明します。
サンプルデータ
デモンストレーションの目的で、MySQL および PostgreSQL フレーバーで利用可能なsakila サンプル データベースを使用します。
サンプル データベースを自由にダウンロードしてサーバーにインポートしてください。必要に応じて他のデータセットを使用することもできます。
例 1: ORDER BY
最新のレコードを日付で取得するために使用できる最も基本的で簡単な方法は、SQL ORDER BY 句を使用することです。
日付値に基づいてレコードを降順に並べ、結果を 1 行のみに制限できます。
例として、Sakila サンプル データベースのレンタル テーブルを考えてみましょう。これには、映画がレンタルされた日付を示す「rental_date」列が含まれています。
これを使用して、ORDER BY 句を使用してテーブルから最新のレコードを取得する方法を示すことができます。
選択する *
レンタルから
注文 レンタル日 DESC までに
リミット 1 ;
この場合、ORDER BY 句を使用し、ターゲット列として「rental_date」を渡します。また、レコードを降順に並べるようデータベースに指示します。
最後に、テーブルから最新の行を返す出力レコードの数も制限します。
例 2: Max() 関数の使用
日付値に対して max() 関数を使用できることをご存知ですか?はい、単純な SQL サブクエリと日付値の max() 関数を使用して、指定されたテーブルから最新のレコードを取得できます。
次の例を考えてみましょう。
選択する *レンタルから
WHERE レンタル日 = (SELECT MAX(レンタル日) FROM レンタル);
サブクエリを使用して、テーブルから最大レンタル日を見つけます。メインクエリでは、最大の日付に等しい「rental_date」を持つレコードを取得する必要があります。
例 3: ウィンドウ関数
ウィンドウ関数をサポートするデータベースの場合、次のようにサブクエリと row_number() 関数を使用してテーブルから最新のレコードを取得できます。
選択する *から (
選択する *、
ROW_NUMBER() OVER ( 注文 BY Rental_date DESC) AS rn
レンタルから
) AS サブクエリ
ここで、rn = 1 ;
指定された例では、サブクエリは、ROW_NUMBER() ウィンドウ関数を使用して、「rental_date」列に基づいて降順で各行に行番号を割り当てます。
次に、外側のクエリは、行番号が 1 であるサブクエリからすべての列を選択し、効果的に最新のレンタル レコードを選択します。
結論
この投稿では、日付に基づいて最新のレコードを取得するために使用できるさまざまな方法とテクニックを検討しました。