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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

4回答

521閲覧

mysql で 2ヶ月ズラして集計する方法

tf23yh8df3

総合スコア60

MySQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2017/08/30 02:13

編集2017/08/30 02:50
したいこと: 2月決算を前提とした集計
  • 例) 2016年度 : 2016-03-012017-02-28

  • 元データ

ymdamt
2015-03-0110
2016-01-0110
2016-02-2520
2016-03-0110
2016-07-2030
2017-01-0240
2017-02-2050
  • 理想
yamt
201540
2016130
試したけど文法エラーに引っかかったSQL

sql

1select 2 date_format(date_sub(ymd, interval 2 month), '%Y'), 3 sum(amt) 4from 5 sales 6group by 7 date_format(date_sub(ymd, interval 2 month), '%Y')

sql

1クエリーのエラー (1064): Syntax error near 2'group by date_format(date_sub(ymd, interval 2 month), '%Y')' at line 5

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

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

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

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

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

aglkjggg

2017/08/30 02:18

between を使った集計ではダメなのでしょうか?
tf23yh8df3

2017/08/30 02:20

2004年から2017年あるので各年度で集計したいです。
sazi

2017/08/30 02:23

よさげな気がしますが、どのように駄目だったのでしょう?
m.ts10806

2017/08/30 02:29

「ダメだった」では何が起きたか分からないので具体的に起きた現象を記述してください。
tf23yh8df3

2017/08/30 02:29

syntax error なので文法上使えないのかなと思って今調べてます
A.Ichi

2017/08/30 02:38

2016-03-01 ~ 2017-02-28のamtは、2016年になりますが、どの点がダメなのでしょうか?
tf23yh8df3

2017/08/30 02:52

YYYY-03 ~ YYYY+1-02 を一つのグループとして集計したいですが、今のクエリではダメみたいで。どの点がダメなのか今調べているところです。
guest

回答4

0

こんにちは。

group by のlineで出ているので、使用できない文字(全角空白など)が含まれていませんか?

ちなみに、ymdの型はなんでしょう?

投稿2017/08/30 03:02

sazi

総合スコア25173

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

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

tf23yh8df3

2017/08/30 03:05

date型ですね。 解決できました。 お手数をお掛けしてすいませんでした。
guest

0

ベストアンサー

どこかが違っているとおもわれますので、全部載せます。

sql

1create table `sales` (`ymd` date, `amt` int); 2insert into `sales` values 3('2015-03-01', 10), 4('2016-01-01', 10), 5('2016-02-25', 20), 6('2016-03-01', 10), 7('2016-07-20', 30), 8('2017-01-02', 40), 9('2017-02-20', 50); 10 11select 12 date_format(date_sub(`ymd`, interval 2 month), '%Y'), 13 sum(`amt`) 14from 15 `sales` 16group by 17 date_format(date_sub(`ymd`, interval 2 month), '%Y') 18; 19 20 21+------------------------------------------------------+------------+ 22| date_format(date_sub(`ymd`, interval 2 month), '%Y') | sum(`amt`) | 23+------------------------------------------------------+------------+ 24| 2015 | 40 | 25| 2016 | 130 | 26+------------------------------------------------------+------------+

投稿2017/08/30 03:01

A.Ichi

総合スコア4070

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

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

tf23yh8df3

2017/08/30 03:06

試して頂きありがとうございます。 自分の環境でもできることを確認しました。
guest

0

記載されているSQLをそのままコピペして実行しましたが、うまくいっていますよ。

sql

1create table sales(ymd date, amt int) ; 2insert into sales values('2015-03-01', 10) ; 3insert into sales values('2016-01-01', 10) ; 4insert into sales values('2016-02-25', 20) ; 5insert into sales values('2016-03-01', 10) ; 6insert into sales values('2016-07-20', 30) ; 7insert into sales values('2017-01-02', 40) ; 8insert into sales values('2017-02-20', 50) ; 9 10select 11 date_format(date_sub(ymd, interval 2 month), '%Y'), 12 sum(amt) 13from 14 sales 15group by 16 date_format(date_sub(ymd, interval 2 month), '%Y') 17;
2015 40 2016 130

投稿2017/08/30 02:59

SVC34

総合スコア1149

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

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

0

エラーが出た sqlを確認したら
group by の前に and があることが原因だと分かりました。

確認不足でお手を煩わせてしまい、申し訳ありません。

投稿2017/08/30 02:58

編集2017/08/30 03:05
tf23yh8df3

総合スコア60

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

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

sazi

2017/08/30 03:05

group by のところを書き換えてエラーが取れたということは、その行にエラー要因の文字があったということでしょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問