MySQLで過去数日間の日付をSELECTして取得する方法
MySQLで現在の日付から数日前の日付を取得したい場合、DATE_ADD()関数を使用します。基本的な構文は以下の通りです。
select date_add(curdate(),interval - 任意の整数値 day);
また、MySQLのDATE_SUB()関数を使っても同様の結果が得られます。
select date_sub(curdate(),interval 任意の整数値 day);
さらに、以下のようにINTERVAL演算子とマイナス記号を組み合わせた、より簡潔な構文も利用できます。
select curdate() - interval 任意の整数値 day;
それでは、上記3つの構文それぞれについて、実際に過去数日間の日付を取得する例を見ていきましょう。
ケース1:DATE_ADD()関数を使う方法
6日前の日付を取得するクエリは以下の通りです。
mysql> select date_add(curdate(),interval -6 day);
実行結果:
+-------------------------------------+ | date_add(curdate(),interval -6 day) | +-------------------------------------+ | 2018-11-20 | +-------------------------------------+ 1 row in set (0.00 sec)
現在の日付(curdate())から6日分が差し引かれた日付が返されていることがわかります。
ケース2:DATE_SUB()関数を使う方法
次に、DATE_SUB()関数を使って同じく6日前の日付を取得してみます。クエリは以下の通りです。
mysql> select date_sub(curdate(),interval 6 day);
実行結果:
+------------------------------------+ | date_sub(curdate(),interval 6 day) | +------------------------------------+ | 2018-11-20 | +------------------------------------+ 1 row in set (0.00 sec)
DATE_ADD()で負の値を指定した場合と同じ結果になりました。DATE_SUB()は「日付から引く」という意図が明確になるため、可読性の面で好まれることもあります。
ケース3:マイナス(-)記号を使う方法
最後に、関数を使わずにマイナス記号だけで日付を計算する方法です。クエリは以下の通りです。
mysql> select curdate()-interval 6 day;
実行結果:
+--------------------------+ | curdate()-interval 6 day | +--------------------------+ | 2018-11-20 | +--------------------------+ 1 row in set (0.00 sec)
この構文が最もシンプルで、日常的なクエリでもよく使われています。
実際のテーブルデータへの応用
これらの構文は、単体で日付を表示するだけでなく、WHERE句と組み合わせることで、過去数日間に作成・更新されたレコードを抽出する際にも非常に便利です。
SELECT * FROM your_table WHERE created_at >= curdate() - INTERVAL 7 DAY;
このように書くことで、「直近7日間」のデータだけを効率よく取得できます。ログ分析やレポート作成など、期間を指定した集計処理でぜひ活用してください。
-
MySQLのDISTINCTとGROUP BYの違いとは?使い分け方を実例付きで解説
DISTINCTとGROUP BY、どちらを使うべき? MySQLで重複データを処理する場合、「SELECT DISTINCT」と「GROUP BY」のどちらを使えばよいか迷うことがあります。この記事では、それぞれの特徴と使い分けのポイントを、実際のSQL実行例を交えてわかりやすく解説します。 SELECT DISTINCTで重複する値を除外する SELECT DISTINCTは、指定したカラムの一意な値(重複しない値)を取得するために使います。重複レコードを取り除く目的で利用されるほか、MAXやAVGといった集計関数と組み合わせることも可能です。単一のカラムに対して適用できるのが特徴です。
-
MySQLでテーブルの最後の10件のレコードを取得する方法
MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected