Mysql统计时间段内的用户(去重)

SELECT b.*
FROM vip_report_vip_income b
	INNER JOIN (SELECT *
		FROM (SELECT a.*
			FROM vip_report_vip_income a
			WHERE 1 = 1
				AND a.game_id = 1005
				AND YEARWEEK(a.`report_date`, 1) >= YEARWEEK('2018-01-27', 1)
				AND YEARWEEK(a.`report_date`, 1) <= YEARWEEK('2018-02-26', 1)
			ORDER BY a.create_time DESC
			) vb
		GROUP BY vip_account_id
		) v ON v.id = b.id

思路:先用2个子句查出最新登录的所有用户记录,再联表对账号排重

参考:https://stackoverflow.com/questions/6572110/order-by-date-and-time-before-group-by-name-in-mysql/6572292


执行计划:



SELECT b.*
FROM vip_report_vip_income b
	INNER JOIN (SELECT a.*, MAX(a.create_time) AS latest
		FROM vip_report_vip_income a
		WHERE 1 = 1
			AND a.game_id = 1005
			AND YEARWEEK(a.`report_date`, 1) >= YEARWEEK('2018-01-27', 1)
			AND YEARWEEK(a.`report_date`, 1) <= YEARWEEK('2018-02-26', 1)
		GROUP BY vip_account_id
		) v ON v.vip_account_id = b.vip_account_id
		AND b.create_time = v.latest;

思路:先用1个子句查出最新登录的所有用户记录(并排重),另外附加一个max(登录时间),再联表,根据账号和登录时间筛查排重

参考:https://stackoverflow.com/questions/10030787/using-order-by-and-group-by-together

执行计划:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值