MySQL实现把两行数据合并为一行

6 篇文章 0 订阅

   在项目中遇到了这样一个问题:某人上月投资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;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值