🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
BigQuery

BigQueryは、Google Cloud Platformが提供しているビッグデータ解析サービス。数TB(テラバイト)またはPB(ペタバイト)の膨大なデータに対し、SQL風のクエリを実行し、高速で集計・分析を行うサービスです。

MySQL

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

SQL

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベーススペシャリスト

データベーススペシャリスト試験 (DB)は、IPA 独立行政法人 情報処理推進機構の実施している国家資格です。

Q&A

解決済

1回答

1036閲覧

データベースからクエリでテキストデータを時間準拠で分割する方法について

mi2

総合スコア63

BigQuery

BigQueryは、Google Cloud Platformが提供しているビッグデータ解析サービス。数TB(テラバイト)またはPB(ペタバイト)の膨大なデータに対し、SQL風のクエリを実行し、高速で集計・分析を行うサービスです。

MySQL

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

SQL

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベーススペシャリスト

データベーススペシャリスト試験 (DB)は、IPA 独立行政法人 情報処理推進機構の実施している国家資格です。

0グッド

0クリップ

投稿2021/02/09 04:57

編集2021/02/09 04:58

<やりたいこと>
データベースからのmeeting_noカラムの時間の全長を計算した上で、
ミーティングごとに区分する数に基づいてテキストファイルを分割して書き出したいと考えております。

<想定されるデータベース>

|meeting_no|start_second|text| |1|0.0|こんにちは |1|2.2|おはようございます |1|3.3|今日はいい天気ですね |1|4.4|ご飯を食べました |1|5.1|朝は気温が低いため、外出する際は防寒が必要であると思われます |1|8.0|ご飯を食べました |1|9.0|昼は気温が高いため、洗濯物日和です |1|10.0|眠いです |1|11.0|おやつの時間です |1|12.0|おやつを食べました |2|・・ |2|・・ :

<考えていること>
・meeting_idごとにgroupby、split_timeはmeeting_id毎に異なる
・time_length = start_secondの最大値をもとに12を自動算出
・split_num = splitしたい任意の数、仮に5とする
・split_time = 2.4を自動算出
・start_secondが0.0は一番小さいグループ割り当て

<想定される集計結果>

|meeting_no|split_id|text| |1|1|こんにちは\nおはようございます |1|2|今日はいい天気ですね\nご飯を食べました |1|3|朝は気温が低いため、外出する際は防寒が必要であると思われます |1|4|ご飯を食べました\n昼は気温が高いため、洗濯物日和です |1|5|眠いです\nおやつの時間です\nおやつを食べました

上記のように、time_lengthを求めた上でテキストデータを分割(結合)したいと考えております。
中間テーブルとしてwith句でsplit_num、split_time、time_lengthを計算し、
start_secondのカラムに対してmeeting_id毎にsplit_timeに当てればよいと思いますが、
いまいち想定通りの結果を出力できず、textをうまく結合することができず困っております。

お手数を掛けしますが、上記をうまく実装する方法についてお知恵を拝借できますと幸いです。
何卒よろしくお願い申し上げます。

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

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

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

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

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

m.ts10806

2021/02/09 05:26

「データベーススペシャリスト」はあくまで情報処理技術者試験の一つです。本件とはどう関係するのでしょうか?
m.ts10806

2021/02/09 05:28

「MySQL」なら「BigQuery」は関係ないようにも思います。バージョンはいくつでしょうか。 あと、テーブル定義も必要ですし、自身が組んでみたコードも必要です。
yambejp

2021/02/09 07:32 編集

プロシージャでやる感じでは? group byしてgroup_concatでもある程度までできそうですが・・・ 0.0と2.2のデータは1じゃなくて0ですよね? 逆にこれらを1とするなら12.0は単独で6になりませんか?
guest

回答1

0

ベストアンサー

  • 同じmeeting_noデータをsplit_num種類に分類したい
  • 分類方法: meeting_no=1の場合、start_secondが0.0以上2.4未満であればsplit_id=1、start_secondが2.4以上4.8未満であればsplit_id=2 ... というように分類する
  • 同じsplit_idに分類された行のtextはstart_secondの昇順に並べて\nで結合する。

やりたいことは↑であっているでしょうか? であれば以下のようなSQLになります (split_num=5をハードコードしています)。ただSQLが複雑になりすぎるので、アプリケーション側で実装したほうがよいかとは思います。

SQL

1WITH 2s AS ( 3 SELECT 4 meeting_no, 5 MAX(start_second) / 5 AS divisor 6 FROM mtg 7 GROUP BY meeting_no 8), 9t AS ( 10 SELECT 11 m.meeting_no, 12 m.start_second, 13 m.text, 14 TRUNCATE(m.start_second / s.divisor, 0) AS split_id 15 FROM mtg AS m 16 JOIN s ON m.meeting_no = s.meeting_no 17), 18u AS ( 19 SELECT 20 meeting_no, 21 start_second, 22 text, 23 IF(split_id < 5, split_id, 5 - 1) + 1 AS split_id 24 FROM t 25) 26SELECT 27 meeting_no, 28 split_id, 29 GROUP_CONCAT(text ORDER BY start_second SEPARATOR '\n') AS text 30FROM u 31GROUP BY meeting_no, split_id;

投稿2021/02/10 16:43

neko_the_shadow

総合スコア2349

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問