質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

2回答

1806閲覧

直近N日間の売上データを日毎に集計したい

tkda

総合スコア23

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2019/08/24 13:33

編集2019/08/25 07:09

前提・実現したいこと

日毎の売上データを集計したテーブルがあります。
例えば、直近1週間/1ヶ月毎の集計を日々出したいときにどのようなクエリで実現できるかご教示いただけますと幸いです。

実行結果で得られる情報として、


1/1: 100,000 ← 1/1から遡ること1週間の集計値
.
.
.
8/24: 100,000 ← 8/24から遡ること1週間の集計値
8/25: 125,000 ← 8/25から遡ること1週間の集計値


のようなケースを想定おり、
特定の日付のみのデータを得たいのではありません。

■売上テーブル
・日付
・売上

■CREATE TABLE文
CREATE TABLE sales (
created_at date NOT NULL,
sales int(11) NOT NULL DEFAULT '0',
)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2019/08/24 14:20

質問にCREATE TABLE文くらい載せてください。
guest

回答2

0

ベストアンサー

直近1ヶ月は危険だからやめたほうがいいです。
質問者さんが想定する1ヶ月とMySQL側が計算する1ヶ月が必ずしも一致しないでしょう。
1週間は単純に6日前から当日までと期間を確定できます

SQL

1select created_at, 2(select sum(sales) from sales 3where created_at between t1.created_at - interval 6 day and t1.created_at) as sales 1week 4from sales as t1 /*エイリアス付加*/

※1ヶ月は

SQL

1created_at between t1.created_at - interval 1 month + interval 1 day and t1.created_at

となりますが、前述の通り必ずしも想定と合致するわけではありません

投稿2019/08/26 01:06

編集2019/08/26 02:46
yambejp

総合スコア114775

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tkda

2019/08/26 02:01 編集

ありがとうございます。少しずつイメージができてきました。 上記クエリを実行してみたのですが、t1が宣言されている箇所がなく、修正しながらやってみたのですが結果としてはトータルの売上がずらずら並んでしまいました。 Betweenに変数を指定するのが肝だと思うのですが、こちらがうまく動かないです。 平均化が目的なので、直近30日など固定の日付でやっていこうと思います。
yambejp

2019/08/26 02:48 編集

ごめんなさい、t1はメインのテーブルです ちなみに「sales」がテーブル名とカラム名でダブっているのでできれば わかりやすく別なものをあてたほうが良いと思います
tkda

2019/08/26 02:50

無事に目的の結果が得られました。 ほとんど情報がないなかで丁寧に回答頂きありがとうございました! 同じように他のかたのサポートができるように、設計も含めて勉強していこうと思います。
guest

0

直近1週間/1ヶ月毎の集計を日々出したいときにどのようなクエリで実現できるか

答えじゃなくて考え方や調べ方を知りたいという事でいいんですよね。

  1. WHERE句で日付を絞り込む(><ANDで指定するなりBETWEEN使うなり)
  2. 日付を動的に指定したいなら現在日時を取得する関数now()を使うなりして、n日前は日付計算で求める。(やり方はググればわかる)

投稿2019/08/25 04:23

gentaro

総合スコア8949

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tkda

2019/08/25 07:05

考え方で問題ありません。うまく説明ができておらず申し訳ないです。 実現したいことを再度追記させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問