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

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

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

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

Q&A

解決済

3回答

3040閲覧

mysqlで毎月の第一月曜日、第二月曜日、、、、などの集計を取るにはどのようにしたら良いでしょうか?

meka

総合スコア23

MySQL

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

0グッド

1クリップ

投稿2019/06/06 04:40

何年間かのデータを分析する際に、第一金曜日の平均や第三月曜日の平均を取りたいと考えています。この場合カラムをそれ用に作った方が良いでしょうか?

mysql

1select * from テーブル名 where dayofweek(日付カラム) = '曜日番号';

これで曜日取得でき、検索する日付の範囲のsqlもかけてはいますが「第二○曜日」「第三○曜日」、、、だけの平均の取り方をどのようにすれば良いのかを考えています。

平均の取り方は分かりますので、「第二○曜日」「第三○曜日」、、、の検索の仕方をご教授お願い出来きないでしょうか。

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

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

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

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

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

guest

回答3

0

ベストアンサー

いろいろこねくり回したらできそうではありますが

こねくり回しすぎるとわけがわからなくなるので、SQLで全てやりきらずにMySQLを使っている言語側で取得して集計しても良いかもしれません。

投稿2019/06/06 04:45

m.ts10806

総合スコア80854

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

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

meka

2019/06/06 04:49

私的には第何曜日か分かるようにカラムを一つ作って検索条件に追加するのが手っ取り早いかなと感じたのですが、プロの方も面倒くさそうな検索条件はカラムを増やしたりするものでしょうか?
m.ts10806

2019/06/06 04:56

それもありだと思います。 集計用カラムを1つ設けておけばそこだけ見ればできますし、nullにはならないので無駄なデータにはならないように思います。
m.ts10806

2019/06/06 04:57

もちろんデータ保存時に第何週か計算する必要がありますが。
meka

2019/06/06 04:58

ありがとうございます!
sazi

2019/06/06 05:31 編集

解決済みになったので、こちらにコメントさせて頂きます。 YEARWEEK()とSTR_TO_DATE()を使用してゴニョゴニョすれば、月内の何週目なのかを判定は可能だと思います。 ハッピーマンデーを判定するようなもんですね。
guest

0

第1金曜日

には考え方が3つあります

  • 最初の金曜日
  • 日曜から始まる1週間単位で1週目の金曜日/同月曜から始まる1週間単位で1週目の金曜日
  • 上記週の1週目がなかったときに第1金曜はなしと判断するか/前月の最終金曜日をしていするか

仕様をきめれば計算方法はいろいろあります

投稿2019/06/06 04:54

yambejp

総合スコア114968

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

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

meka

2019/06/06 05:06

ありがとうございます、少し頭をひねって考えてみます!
guest

0

日本で「月の第n△曜日」と言った場合、
(n-1)7+1 ~ n7 の7日間の内にある当該曜日、を指します。
※法律などでの定義はこうなっています。祝日法におけるいわゆるハッピーマンデーの定義とか

ということは、第1○曜日を取りたければ、曜日(dayofweek)が○で、かつ日付が1~7 の間であるものを探せばよいのです。

SQL

1WHERE DAYOFWEEK(日付カラム)=:dayofweek 2AND DAY(日付カラム) >= (:weekno-1)*7+1 3AND DAY(日付カラム) <= (:weekno)*7

投稿2019/06/06 04:48

編集2019/06/06 04:53
tacsheaven

総合スコア13703

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

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

meka

2019/06/06 05:00

なるほど!こんな計算方法があるのですね!とても参考になりました、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問