在项目中遇到了这样一个问题:某人上月投资N元钱,本月投资M元钱,现要求把本月和上月的投资金额放在一行显示。如下图:
解决方案:用left join on
详细SQL脚本如下:
INSERT INTO DW_ADS.TR04_OPER_003 ( BUSINESS_DATE, USER_ID, MONTH_INVEST_MONEY, LAST_MONTH_INVEST_MONEY, INVEST_NET, DATA_DATE ) SELECT DATE_FORMAT( LAST_DAY( DATE_FORMAT(IN_DATE, '%Y-%m-%d') ), '%Y%m%d' ), A.USER_ID, A.AMOUNT, B.AMOUNT, (A.AMOUNT - B.AMOUNT), IN_DATE FROM ( SELECT USER_ID, SUM(AMOUNT) AS AMOUNT FROM DW_BDS.SMY_BIDDING_TRANS_DAY WHERE BUSINESS_SYSTEM_DATE >= DATE_FORMAT( DATE_ADD( IN_DATE, INTERVAL - DAY (IN_DATE) + 1 DAY ), '%Y%m%d' ) AND BUSINESS_SYSTEM_DATE <= DATE_FORMAT( LAST_DAY( DATE_FORMAT(IN_DATE, '%Y-%m-%d') ), '%Y%m%d' ) GROUP BY USER_ID ) AS A LEFT JOIN ( SELECT USER_ID, SUM(AMOUNT) AS AMOUNT FROM DW_BDS.SMY_BIDDING_TRANS_DAY WHERE BUSINESS_SYSTEM_DATE >= DATE_FORMAT( DATE_SUB( DATE_SUB( DATE_FORMAT(IN_DATE, '%y-%m-%d'), INTERVAL EXTRACT(DAY FROM IN_DATE) - 1 DAY ), INTERVAL 1 MONTH ), '%Y%m%d' ) AND BUSINESS_SYSTEM_DATE <= DATE_FORMAT( DATE_SUB( DATE_SUB( DATE_FORMAT(IN_DATE, '%y-%m-%d'), INTERVAL extract(DAY FROM IN_DATE) DAY ), INTERVAL 0 MONTH ), '%Y%m%d' ) GROUP BY USER_iD ) AS B ON A.USER_ID = B.USER_ID;