プロが教えるわが家の防犯対策術!

以下テーブルでキー①、キー② のグループで最新年月の金額を取得し、
それをキー①毎に合計し、その合計結果で元テーブルをUPDATEしたいです。【以下(2)】
キー①が001のレコードの金額は一律、90,000(20,000+30,000+40,000)で出力したいです。
最終的にはキー①単位にレコード集約(最新年月のみ表示)します。【以下(3)】

前回と同じ質問となり、結局うまくいかず再度ご質問させてください。
以上よろしくお願いします。

(1)【実行前テーブル】
No キー① キー➁  年月 金額
1  001   111  201804 10,000
2  001   111  201805 20,000
3  001   112  201804 30,000
4  001   113  201806 40,000
5  002   222  201807 50,000
6  002   222  201808 60,000

(2)【実行後テーブル】※集計金額設定
No キー① キー➁  年月 金額 集計金額
1  001   111  201804 10,000 90,000
2  001   111  201805 20,000 90,000
3  001   112  201804 30,000 90,000
4  001   113  201806 40,000 90,000
5  002   222  201807 50,000 90,000
6  002   222  201808 60,000 90,000

(3)【実行後テーブル】※キー①単位にレコード集約(最新年月のみ表示)
No キー① キー➁  年月 金額 集計金額
4  001   113  201806 40,000 90,000
6  002   222  201808 60,000 90,000

A 回答 (1件)

>最新年月の金額



(2)の5,6の集計値は60,000じゃないの?

・テストデータ
create table tbl(no int,key1 varchar(10),key2 varchar(10),ym varchar(10),price int);
insert into tbl values
(1,'001','111','201804',10000),
(2,'001','111','201805',20000),
(3,'001','112','201804',30000),
(4,'001','113','201806',40000),
(5,'002','222','201807',50000),
(6,'002','222','201808',60000);

・(2)集計
select * from tbl as t2
inner join(
select key1,sum(price) as shukei from tbl as t1
where not exists(select 1 from tbl where key1=t1.key1 and key2=t1.key2 and ym>t1.ym)
group by key1) as t3 on t2.key1=t3.key1

・(3)集計
select * from tbl as t2
inner join(
select key1,sum(price) as shukei from tbl as t1
where not exists(select 1 from tbl where key1=t1.key1 and key2=t1.key2 and ym>t1.ym)
group by key1) as t3 on t2.key1=t3.key1
where not exists(select 1 from tbl where key1=t2.key1 and ym>t2.ym)
    • good
    • 0
この回答へのお礼

ご指摘とおり集計値は60,000です。失礼いたしました。

ご提示いただいた内容で実現しました。
勉強させていただきました、ありがとうございました!

お礼日時:2019/01/07 19:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!