表名 | member_id | participate_time |
---|---|---|
activity_record | 會員號 | 活動參與時間 |
表名 | member_id | channel | view_time |
---|---|---|---|
page_view | 會員號 | 渠道 | 頁面訪問時間 |
因為每位會員只能參加一次活動,也就是活動期間只能獲得過一次積分,或者領(lǐng)取過一次優(yōu)惠券等等這種意思,也就是每位會員最多只會產(chǎn)生一條 activity_record 記錄。
可是 page_view 這張表的記錄方式就不一樣了。會員可能既收到過短信鏈接,又掃描過活動二維碼,又被好友分享過活動鏈接,這下,對于這位會員來說,就會產(chǎn)生多條頁面訪問記錄,即在 page_view 里產(chǎn)生多條數(shù)據(jù)。
你想想,會員肯定是先通過某一個渠道進入到活動頁面,才能去參加活動。也就是有多條 page_view 的數(shù)據(jù),按照 view_time 倒序排列,總有一條的 view_time 是小于且最接近于 activity_record 的 participate_time,下一條 page_view 的 view_time 就會大于 activity_record 的 participate_time。
select c.member_id,c.view_time,.channel from ( SELECT member_id, SUBSTRING_INDEX( GROUP_CONCAT( view_time ORDER BY view_time DESC ), ',', 1 ) AS view_time, SUBSTRING_INDEX( GROUP_CONCAT( channel ORDER BY channel DESC ), ',', 1 ) AS channel FROM page_view a LEFT JOIN activity_record b on a.member_id = b.member_id where a.view_time b.participate_time GROUP BY member_id) c;
到此這篇關(guān)于MySQL連表查詢分組去重的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)MySQL連表查詢分組去重內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!