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

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

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

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

Q&A

解決済

1回答

766閲覧

MySQL あるレコードの値を別の行に振り分けたい

te-chi-yu

総合スコア10

MySQL

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

0グッド

0クリップ

投稿2020/04/24 22:06

編集2020/04/27 01:35

前提・実現したいこと

MySQLで、取得した表内のあるレコードの値を別の行に振り分けたいのですが、どうすればよろしいでしょうか?

例えば、日付の最大行のvalueを、それ以降の行に振り分けたいです。
A.

date value 求めたい値 2020/02/01 3000 - 2020/01/31 2000 2000 2020/01/30 1000 1000 2020/01/29 0 0

B.

date value 求めたい値 2020/02/01 1000 - 2020/01/31 2000 1000 2020/01/30 1000 0 2020/01/29 0 0

C.

date value 求めたい値 2020/02/01 1500 - 2020/01/31 1000 1000 2020/01/30 1000 500 2020/01/29 0 0

D.

date value 求めたい値 2020/02/01 300 - 2020/01/31 1000 300 2020/01/30 1000 0 2020/01/29 0 0

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

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

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

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

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

guest

回答1

0

ベストアンサー

回答パターン1

CASE式を使うと実現できます。

SQL

1SELECT 2 date 3 , value 4 , CASE 5 WHEN date < STR_TO_DATE('20200201', '%Y%m%d') THEN value 6 ELSE '-' 7 END AS 求めたい値 8FROM 9 tbname 10;
datevalue求めたい値
2020/02/013000-
2020/01/3120002000
2020/01/3010001000
2020/01/2900

回答パターン2

日付で降順に並べたのちに、分析関数LAG()を使用して次行の値を出力しました。

SQL

1SELECT 2 dt 3 , val 4 , LAG(val, -1) OVER (ORDER BY dt) AS 求めたい値 5FROM 6 kotonedb.tbname 7ORDER BY 8 dt DESC 9;
dtval求めたい値
2020/05/051000(NULL)
2020/04/0420001000
2020/03/0330002000
2020/02/0240003000
2020/01/0150004000

投稿2020/04/25 00:11

編集2020/04/27 12:55
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

te-chi-yu

2020/04/27 01:36 編集

ご回答ありがとうございます。 Aのvalueと求めたい値が一致する場合はできたのですが、 B~Dのように、最初のvalueを順に割り振って、valueと求めたい値に差が出る場合は、 どのようにすればよろしいでしょうか? ※例のパターンを追記しました
退会済みユーザー

退会済みユーザー

2020/04/27 12:56

回答パターンを追記しました。ご参考いただければ幸いです。
te-chi-yu

2020/05/07 07:58

ありがとうございます。 LAG関数を使って解決できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問