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

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

新規登録して質問してみよう
ただいま回答率
85.35%
変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

MySQL

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

JOIN

これはSQL文のJOINに関するタグです。リレーショナルデータベースシステムの二つ以上のテーブルを結合する際に、この構文が利用されます。

SQL

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

Q&A

解決済

1回答

1230閲覧

[MySQL]テーブル結合した状態で変数を使用して一つ前のデータを取得したい

entaro12345

総合スコア75

変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

MySQL

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

JOIN

これはSQL文のJOINに関するタグです。リレーショナルデータベースシステムの二つ以上のテーブルを結合する際に、この構文が利用されます。

SQL

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

0グッド

0クリップ

投稿2021/10/13 11:59

編集2021/10/14 04:57

前提・実現したいこと

MySQLにてクエリを作成してます。
そこで、一つ前のデータを変数に入れて、現データと一つ前のデータを比較して
変わっていればカウントを初期化、変わってなければカウントを続ける。
という処理をしたいです。

単純なselect文であればできたのですが、数テーブルを結合(join)した状態だと
うまくいかないです。
お力を貸してください。

★仮のデータとなります★
↓↓テーブルA

列1列2列3
00000101001
00000102002
00000103003
00000104004
00000201001
00000202002
00000203003
00000301001

↓↓テーブルB

列1列2
000001AAA
000002BBB
000003CCC
000004DDD
000005EEE

↓↓テーブルC

列1列2列3
000001001あああ
000001002いいい
000001003ううう
000001004えええ
000002001おおお
000002002かかか
000002003ききき
000003001くくく

↓↓抽出したいデータ

列1列2列3列4列5
000001あああ010011
000001いいい020022
000001ううう030033
000001えええ040044
000002おおお010011
000002かかか020022
000002ききき030033
000003くくく010011

該当のソースコード

SQL

1select A.* 2 , B.* 3 , @conter := if (@val = C.aaa, @counter + 1, 1) as cnt_val 4 , @val := A.route_code as sCode, 5 , @conter := 1 as cnter 6from テーブルA as A 7inner join テーブルB as B on 結合条件 8inner join テーブルC as C on 結合条件, 9(select @val := "") as val, 10(select @counter := 0) as cnt 11

試したこと

↓↓都合しないとうまくいきます

SQL

1select A.* 2 , @conter := if (@val = A.test, @counter + 1, 1) as cnt_val 3 , @val := A.route_code as sCode, 4 , @conter := 1 as cnter 5from テーブルA as A, 6(select @val := "") as val, 7(select @counter := 0) as cnt 8

補足情報(FW/ツールのバージョンなど)

MySQL 5.7.15

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

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

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

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

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

yambejp

2021/10/14 02:33

具体的なデータを提示ください
entaro12345

2021/10/14 02:57

失礼いたしました。 データをご提示いたします。
guest

回答1

0

ベストアンサー

おそらく一旦サブクエリで処理して外側で変数処理するやり方になりそうですが
いまご提示の内容では具体的な回答は難しいです

SQL

1create table tbl_a(col1 varchar(10),col2 varchar(10),col3 varchar(10)); 2insert into tbl_a values 3('000001','01','001'), 4('000001','02','002'), 5('000001','03','003'), 6('000001','04','004'), 7('000002','01','001'), 8('000002','02','002'), 9('000002','03','003'), 10('000003','01','001'); 11 12create table tbl_b(col1 varchar(10),col2 varchar(10)); 13insert into tbl_b values 14('000001','AAA'), 15('000002','BBB'), 16('000003','CCC'), 17('000004','DDD'), 18('000005','EEE'); 19 20create table tbl_c(col1 varchar(10),col2 varchar(10),col3 varchar(10)); 21insert into tbl_c values 22('000001','001','あああ'), 23('000001','002','いいい'), 24('000001','003','ううう'), 25('000001','004','えええ'), 26('000002','001','おおお'), 27('000002','002','かかか'), 28('000002','003','ききき'), 29('000003','001','くくく'); 30 31select t1.*,t2.col3 as col4,(select count(*)+1 from tbl_c where col1=t1.col1 and col2<t1.col2) as col5 from tbl_c as t1 32inner join tbl_a as t2 on t1.col1=t2.col1 and t1.col2=t2.col3

tbl_b使ってないですね?
tbl_aとtbl_bを分ける意味があまりないですね

投稿2021/10/14 02:35

編集2021/10/14 05:23
yambejp

総合スコア116724

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問