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

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

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

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

1回答

3400閲覧

特定のカラムの最大値を別のカラムにUPDATEする

riomakopa

総合スコア30

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2018/11/12 09:40

編集2022/01/12 10:55

仮に以下のようなテーブルがあったとして
|列1|列2|列3|
table:a

|store |revision|deposit |tsubo | |UDON |1 |4,143,600 |[NULL] | |UDON |2 |4,143,600 |[NULL] | |UDON |3 |4,143,600 |[NULL] | |UDON |4 |4,143,600 |180000 | |Mac |1 |2,152,400 |[NULL] | |Mac |2 |2,152,400 |[NULL] | |Mac |3 |2,152,400 |[NULL] | |Mac |4 |2,152,400 |[NULL] | |Mac |5 |2,152,400 |[NULL] | |Mac |6 |2,152,400 |250000 | |TENPURA|1 |1,234,500 |[NULL] | |TENPURA|2 |1,234,500 |[NULL] | |TENPURA|3 |1,234,500 |[NULL] | |TENPURA|4 |1,234,500 |[NULL] | |TENPURA|5 |1,234,500 |120000 |

やりたいことは「store」ごとにstoreのmax「revision」を
NULLにUpdateしたいのですが

例:↑だとUDONのtsuboには180000、
Macには250000がすべてはいるようにする。

以下が作ったSQLですが
うまくいかず、どうすればよいかご教授頂きたいです。

update table_a a1 set a1.tsubo = select a2.store , a2.revision, a2.deposit, a2.tsubo from table_a a2 inner join (select store, max(revision) as revision from a3 group by store ) amax on a2.store = amax.store and a2.revision = amax.revision

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

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

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

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

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

m.ts10806

2018/11/12 09:43

コードはマークダウンのcode機能をご利用ください。マークダウンにはテーブル機能もあるのでそちらも利用されたら見やすくなります
guest

回答1

0

SQLとやりたいことが一致していません。
SQLと例から解釈して、やりたいことは、

「store」ごとにstoreのmax「revision」のtsudoを、max以外の「revision」にも適用する。

と想定すると、

SQL

1update table_a a1 2set tsubo=a2.tsubo 3from ( 4 select store, tsubo from table_a a0 5 where revision=( 6 select max(revision) from table_a where store=a0.store 7 ) 8) a2 9where a1.tsubo is null and a1.store=a2.store

となります。
※UPDATE構文でのset では、a1.tsubo=a2.tsuboのように、左辺にa1.などの修飾はできません。
別パターン

SQL

1update table_a a1 2set tsubo=( 3 select tsubo from table_a 4 where (store, revision)=( 5 select a1.store, max(revision) from table_a where store=a1.store 6 ) 7 ) 8where tsubo is null

SQL

1update table_a a1 2set tsubo=( 3 select tsubo from table_a 4 where store=a1.store 5 and revision=( 6 select max(revision) from table_a where store=a1.store 7 ) 8 ) 9where tsubo is null

DATA

1CREATE TABLE table_a 2 (store varchar, revision int, deposit int, tsubo int) 3; 4 5INSERT INTO table_a 6 (store, revision, deposit, tsubo) 7VALUES 8 ('UDON', 1, 4143600, Null), 9 ('UDON', 2, 4143600, Null), 10 ('UDON', 3, 4143600, Null), 11 ('UDON', 4, 4143600, 180000), 12 ('Mac', 1, 2152400, Null), 13 ('Mac', 2, 2152400, Null), 14 ('Mac', 3, 2152400, Null), 15 ('Mac', 4, 2152400, Null), 16 ('Mac', 5, 2152400, Null), 17 ('Mac', 6, 2152400, 250000), 18 ('TENPURA', 1, 1234500, Null), 19 ('TENPURA', 2, 1234500, Null), 20 ('TENPURA', 3, 1234500, Null), 21 ('TENPURA', 4, 1234500, Null), 22 ('TENPURA', 5, 1234500, 120000) 23;

投稿2018/11/12 10:07

編集2018/11/12 10:20
sazi

総合スコア25138

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問