我绞尽脑汁想解决这个问题。我正在使用 Presto SQL。
我有2张桌子:
trx(每日交易量):
| date | usage | deposit_id |
| -----------| -------- |------------|
| 2024-08-12 | 2,500 | DEP001 |
| 2024-08-14 | 3,500 | DEP002 |
| 2024-08-15 | 3,500 | DEP002 |
存款(进行存款的客户):
| deposit_date | deposit_id | deposit_amount|
| -------------| -----------|---------------|
| 2024-08-12 | DEP001 | 1,000,000 |
| 2024-08-13 | DEP002 | 500,000 |
我希望连接的表是(来自每笔存款的交易):
| date | usage | deposit_id | deposit_amount
| -----------| -------- |------------|---------------
| 2024-08-12 | 2,500 | DEP001 | 1,000,000
| 2024-08-13 | 0 | DEP002 | 500,000
| 2024-08-14 | 3,500 | DEP002 | 0
| 2024-08-15 | 3,500 | DEP002 | 0
基本上我希望将这两个表连接起来,并在使用日期显示使用情况,并在存款日期显示存款金额。我还想继续跟踪每次使用的 Deposit_id。
左/右/内连接不起作用,因为日期不会显示。
请帮忙!谢谢你
我尝试过左连接、右连接、内连接,但不起作用。还探索了 union all 和 group by,但它会在最终表中显示空白。
我不了解 Presto,因此您可能需要调整语法,但这可能是一种方法:
WITH DATASET AS (
SELECT
T.TRX_DATE, T.USAGE, T.DEPOSIT_ID T_DEPOSIT_ID
,D.DEPOSIT_DATE, D.DEPOSIT_ID D_DEPOSIT_ID, D.DEPOSIT_AMOUNT
FROM TRX T
FULL JOIN DEPOSIT D ON T.TRX_DATE = D.DEPOSIT_DATE AND T.DEPOSIT_ID = D.DEPOSIT_ID
)
SELECT
COALESCE(TRX_DATE, DEPOSIT_DATE) DATE
,NVL(USAGE,0) USAGE
,COALESCE(T_DEPOSIT_ID, D_DEPOSIT_ID) DEPOSIT_ID
,NVL(DEPOSIT_AMOUNT, 0) DEPOSIT_AMOUNT
FROM DATASET
ORDER BY COALESCE(TRX_DATE, DEPOSIT_DATE) ASC
;