例えば、下記のような受注データがあるとします。
日付ごとの支払い金額を算出したいと思い、単純にGROUP BY "出荷日時"ですると、時分秒まで一致しているかどうかを見てしまい、日時別で算出されてしまいます。
では、年月日が一致した合計金額を算出したいときは、どうすれば良いのでしょうか。そちらを紹介したいと思います。
サンプルデータ
テーブル名:dtb_order
受注ID | 支払い金額 | 出荷日時 |
---|---|---|
1 | 1,200 | 2021/11/30 10:00:40 |
2 | 2,200 | 2021/11/29 09:10:45 |
3 | 1,000 | 2021/10/20 08:20:30 |
4 | 1,500 | 2021/10/20 10:25:30 |
5 | 300 | 2021/10/29 09:10:45 |
このように数少ないデータであれば、暗算で可能ですが、実際の開発現場では、1000件以上もの受注データがあります。 MySQLでSQL文を実行すればサクッと必要なデータの抽出が可能です。
DATE_FORMAT
結論から言うと、日付だけで絞込むには、DATE_FORMATという関数を使います。
例を出す前に先ずは、単純にGROUP BYを使用した時の結果を見ていきたいと思います。
GROUP BY <カラム名>
SELECT o.支払い金額、 o.出荷日時 FROM dtb_order as o GROUP BY o.出荷日時
- 結果
支払い金額 | 出荷日時 |
---|---|
1,200 | 2021/11/30 10:00:40 |
2,500 | 2021/11/29 09:10:45 |
1,000 | 2021/10/20 08:20:30 |
1,500 | 2021/10/20 10:25:30 |
11/29 09:10:45の支払い金額のみグループ化されています。
10/20 はそれぞれ別々で支払い金額が出力されました。
GROUP BY DATE_FORMAT(<カラム名>,<フォーマット>)
SELECT o.支払い金額、 o.出荷日時 FROM dtb_order as o GROUP BY DATE_FORMAT(o.出荷日時,'%Y-%m-%d')
- 結果
支払い金額 | 出荷日時 |
---|---|
1,200 | 2021/11/30 10:00:40 |
2,500 | 2021/11/29 09:10:45 |
2,500 | 2021/10/20 08:20:30 |
10/20がまとまって、思い通りのデータが出力されました。
DATE_FORMATですが、指定したカラムの日付のフォーマットを替えることができます。 DATE_FORMAT(o.出荷日時,'%Y-%m-%d')をすることにより、年月日までの値に変更して、GROUP BYでまとめました。
ちなみに出力される日付よりも後ろの時間は、最初に通るレコードの値です。 後ろの時間を非表示にしたい場合は、**SELECT** にDATE_FORMAT(o.出荷日時,'%Y-%m-%d')を指定すると表示が日付のみになります。
以上となります。 Have a nice development day~~!