GROUP BY分组查询时,如何额外获取In IP与Out IP字段?
解决方案
调整分组维度(推荐)
如果需要在同一行展示同一用户同一会话的入站、出站IP及日期,需将分组维度从name, ip, session调整为name, session,确保同一会话的所有记录合并为一组:
select name, session, max(case when activity = 'in' then date end) in_date, max(case when activity = 'out' then date end) out_date, max(case when activity = 'in' then `In IP` end) in_ip, max(case when activity = 'out' then `Out IP` end) out_ip from view group by name, session
该逻辑会:
- 针对
activity='in'的记录提取入站日期和入站IP - 针对
activity='out'的记录提取出站日期和出站IP - 无论入站、出站IP是否相同,都能在同一行输出完整的会话信息
保留原有分组维度
若必须保留name, ip, session的分组方式,可直接通过聚合函数提取对应IP字段:
select name, ip, session, max(case when activity = 'in' then date end) in_date, max(case when activity = 'out' then date end) out_date, max(`In IP`) in_ip, max(`Out IP`) out_ip from view group by name, ip, session
但这种方式会将同一session下不同IP的记录拆分为多行,仅能展示当前分组对应的单方向IP(如示例中Y的session2会拆成两行,分别展示入站IP和出站IP)。
内容的提问来源于stack exchange,提问作者nav
相关产品推荐
相关产品推荐

