SQLで月次データを集計する方法について、基本的な構文から実践的なテクニックまでを解説します。データ分析や業務効率化に悩む方は、この記事で解決の糸口が見つかるのではないでしょうか?
SQL 1日前のデータを取得する方法とクエリの実例
SQLで1日前のデータを取得する方法について、具体的なクエリ例と実践的なテクニックを解説します。データベース別の違いや注意点も含めて、より効率的なデータ抽出方法を知りたくありませんか?
MySQLでは、DATE_SUB関数やINTERVAL演算子を使用して1日前のデータを取得できます。基本的な構文は以下の通りです:
SELECT * FROM テーブル名
WHERE 日付カラム >= DATE_SUB(NOW(), INTERVAL 1 DAY)
また、より簡潔な書き方として、以下のような方法も可能です:
SELECT * FROM テーブル名
WHERE 日付カラム > (NOW() - INTERVAL 1 DAY)
SQL Serverでは、DATEADD関数を使用して日付の計算を行います。基本的な構文は以下の通りです:
SELECT * FROM テーブル名
WHERE 日付カラム >= DATEADD(day, -1, GETDATE())
また、日付の範囲指定を行う場合は、以下のように記述できます:
SELECT * FROM テーブル名
WHERE 日付カラム BETWEEN
DATEADD(day, -1, GETDATE()) AND GETDATE()
日付データの取得を最適化するためには、以下の点に注意が必要です:
/* 非効率な例 */
WHERE DATE(日付カラム) = DATE_SUB(CURDATE(), INTERVAL 1 DAY)
/* 効率的な例 */
WHERE 日付カラム >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)
AND 日付カラム < CURDATE()
日付範囲を指定する際は、時刻の扱いに注意が必要です:
/* 1日前の0時から現在までのデータを取得 */
SELECT * FROM テーブル名
WHERE 日付カラム >= DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)
AND 日付カラム <= NOW()
/* タイムゾーンを考慮した取得 */
SELECT * FROM テーブル名
WHERE 日付カラム >=
CONVERT_TZ(DATE_SUB(NOW(), INTERVAL 1 DAY), 'UTC', 'Asia/Tokyo')
実際のビジネスシーンでよく使用される分析クエリの例を紹介します:
SELECT
TODAY.date AS 今日,
TODAY.sales AS 今日の売上,
YESTERDAY.sales AS 昨日の売上,
((TODAY.sales - YESTERDAY.sales) / YESTERDAY.sales * 100) AS 増減率
FROM
sales_data TODAY
LEFT JOIN
sales_data YESTERDAY
ON
YESTERDAY.date = DATE_SUB(TODAY.date, INTERVAL 1 DAY)
WHERE
TODAY.date = CURRENT_DATE()
SELECT
HOUR(created_at) AS 時間帯,
COUNT(*) AS 件数,
SUM(amount) AS 合計金額
FROM
transactions
WHERE
created_at >= DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)
AND created_at < CURRENT_DATE()
GROUP BY
HOUR(created_at)
ORDER BY
時間帯
これらのクエリを使用する際は、以下の点に注意が必要です: