MySQL|前日比(差分)を求めるクエリ【簡単なのはFROM句】

FROM句にテーブルを並べて、前日比を求めるクエリです。

「昨日の日付に値を結び付けてJOIN句で…」と考えがちですが、FROM句を使う方法が簡単です。

日付をずらすためにDATE_ADD関数を使って1日分だけ先送りします。あとはWHERE句で結び付けてSELECT句で引き算すると前日比が出てきます。

前日比を求める考え方

一日前の日付に値を結び付けたテーブルをJOINして求める方法を考えると思います。しかし、クエリがちょっと複雑になりそうな予感がします。

MySQLで前日比を求めるクエリの考え方を示す画像

イメージしやすい単純な方法は、今日と昨日のテーブルを2つ並べて値を引く。

このイメージどおりのやり方が、FROM句にテーブルを並べる方法です。

前日比(差分)は、昨日の値に今日の日付を持たせて結び付け、その値を今日の値から引く。という考え方になります。

前日比を求めるクエリ

日付け, 人数 のデータを使って、前日比を求めるクエリを書いてみます。

SELECT *, people - i_people AS '前日比'
FROM tbl, (
  SELECT DATE_ADD(daydate, INTERVAL 1 DAY) AS i_date, people AS i_people
  FROM tbl) AS i_tbl
WHERE daydate = i_date;

FROM句には、元となるtblテーブルと、日付を1日分ずらしたテーブルを並べます。

日付をずらしたテーブルには、昨日の値に今日の日付を持たせたいので、日付を一日分だけ先送りさせます。日付を先送りするためにDATE_ADD関数を使います。INTERVAL 1 DAYとすると1日分の日付を増やせます。

そして、元となるtblテーブルと日付をずらしたi_tblを、WHERE句で結び付けます。

このクエリの結果は、前日比(差分)がばっちり出てきます。

MySQLで前日比を求めるクエリの結果を示す画像

日付を足すDATE_ADD、引くDATE_SUB

SELECT DATE_ADD(CURRENT_DATE(), INTERVAL 1 DAY); -- 明日 2020-04-02

SELECT CURRENT_DATE(); -- 今日 2020-04-01

SELECT DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY); -- 昨日 2020-03-31

まとめ

  • やり方としてイメージしやすい単純な方法は、今日と昨日のテーブルを2つ並べて値を引く。
  • FROM句には、元となるtblテーブルと、日付を1日分ずらしたテーブルを並べる。
  • 日付を先送りするためにDATE_ADD関数を使う。
  • 元となるtblテーブルと日付をずらしたi_tblを、WHERE句で結び付ける。

開発現場で効率的に動くために有効なのは、解決策のパターンを経験として増やすことです。SQLのパターンは、やりたいことを逆引きできるこの本が強力です。