查询结果集 | 查询限制条件 |
---|---|
渠道每日来访数据 | 各个渠道在各个日期的来访用户合计值,如同一客户在同一天来访多次,则计为最后一次来访的渠道 |
SELECT
*,
COUNT(channel_name) _count
FROM
(SELECT
P.id,
P.`see_time`,
P.`channel_name`,
P.`customer_id`,
P.`event_date`,
P.`wx_mini_option_config_id`,
P.`visit_register_id`,
P.`event_point`,
P.`hit_point_visit_register_contract`
FROM
channel_data_map P
INNER JOIN
(SELECT
MAX(M.see_time) AS MAX_SEE_TIME,
M.*
FROM
channel_data_map M
WHERE M.`event_point` = '来访'
AND (
M.`event_date` BETWEEN '2019-12-24'
AND '2019-12-27'
)
AND (
M.`project_id` = '3bf62a5e5da5d'
)
GROUP BY M.event_date,
M.customer_id) Q
ON P.see_time = Q.MAX_SEE_TIME
WHERE P.`event_point` = '来访'
AND (
P.`event_date` BETWEEN '2019-12-24'
AND '2019-12-27'
)
AND (
P.`project_id` = '3bf62a5e5da5d'
)) Z
GROUP BY Z.channel_name;
朋友找我帮忙,刚开始采用内层的group by 查询,虽然查询出来了每一个客户每一天的唯一一条访问记录,但是因为mysql 分组的默认取值顺序无法指定,结果集并不对。因为 group by 的MAX(see_time)那条记录是
准确的,这样一来再次和未分组前的数据进行Inner Join,就是我们想要的结果集了.
新的一年第一篇博客,2020加油!