##### 実現したいこと
下記、『取引テーブル』の"取引回数"と"取引相手"を更新したいです。
★取引テーブル
基準日 | 取引No | 取引回数 | 取引相手 |
---|---|---|---|
20190520 | 00004 | ||
20190519 | 00003 | ||
20190518 | 00002 | ||
20190517 | 00001 |
『取引テーブル』は"基準日"と"取引No"で「取引明細テーブル」と関係性を持っており、
『取引テーブル』の1取引につき『取引明細テーブル』に2明細存在し、そこから"役割"と"ユーザID"がわかります。
★取引明細テーブル
基準日 | 取引No | 役割 | ユーザID |
---|---|---|---|
20190520 | 00004 | 出品者 | U001 |
20190520 | 00004 | 取引者 | U004 |
20190519 | 00003 | 出品者 | U002 |
20190519 | 00003 | 取引者 | U003 |
20190518 | 00002 | 出品者 | U001 |
20190518 | 00002 | 取引者 | U003 |
20190517 | 00001 | 出品者 | U001 |
20190517 | 00001 | 取引者 | U002 |
例として「取引テーブル」の20190520のレコードの"取引回数"と"取引相手"の算出方法を以下にまとめます。
- "基準日"と"取引No"で明細テーブルと紐付け、役割が「出品者」の「ユーザID(=U001)」を取得
- 1で取得したユーザID:U001で『取引明細テーブル』を再抽出
- 2で取得した「基準日」と「取引No」で『取引明細テーブル』を再抽出
→【基準日:20190520と取引No:00004】および、【基準日:20190518と取引No:00002】、【基準日:20190517と取引No:00001】のレコードが取得
0. 3で取得した結果に対し、役割が「取引者」のレコードのみに絞る。
0. レコード数が3なので"取引回数"が'3'、ユーザIDがU002とU003、U004の3種なので"取引相手"は'3'
ただし、集計対象は過去の取引のみという制約があります。
例えば、基準日:20190518の場合、『取引明細テーブル』より出品者はU001となるので、
基準日が20190520、20190518、20190517のレコードが該当しますが、
20190518より未来の20190520は集計対象から外す必要があります。
↓↓
★最終的に実現したい結果
基準日 | 取引No | 取引回数 | 取引相手 |
---|---|---|---|
20190520 | 00004 | 3 | 3 |
20190519 | 00003 | 2 | 1 |
20190518 | 00002 | 2 | 2 |
20190517 | 00001 | 1 | 1 |
以下のSQLにて、上記算出方法の'4'まではできるかと思うのですが、そのあとがわからず…。
実現可能であるか、わかるかたご教示いただければ幸いです。
よろしくお願い致します。
SELECT t5.基準日, t5.取引No FROM 取引明細 AS t5 INNER JOIN (SELECT t3.基準日, t3.取引No FROM 取引明細 AS t3 WHERE t3.ユーザID = ( SELECT t1.ユーザID FROM 取引明細 AS t1 INNER JOIN 取引 AS t2 ON t1.基準日 = t2.基準日 AND t1.取引No = t2.取引No GROUP BY t1.ユーザID ) ) AS t4 ON t4.基準日 = t5.基準日 AND t4.取引No = t5.取引No WHERE t5.役割 = '取引者'
回答2件