这似乎是一件容易的事,但我似乎无法绕过它。
我只需要每天都找出使用过移动设备的用户,使用过桌面的用户以及同时使用这两者的用户。每个user / access_dt组合应该只产生一行。
示例数据如下:
USER, ACCESS_DATE, FORMFACTOR
1 01-01-2014 Mobile
1 01-01-2014 Desktop
2 01-01-2014 Mobile
3 01-01-2014 Desktop
期望的输出:
USER, ACCESS_DATE, KEY_MOBILE, KEY_DESKTOP, KEY_MOBILE_DESKTOP
1 01-01-2014 1 1 1
2 01-01-2014 1 0 0
3 01-01-2014 0 1 0
非常感谢!
答案 0 :(得分:4)
这是一个透视查询,基本上。我会用条件聚合来做到这一点:
select user, access_date,
max(case when FORMFACTOR = 'Mobile' then 1 else 0 end) as KEY_MOBILE,
max(case when FORMFACTOR = 'Desktop' then 1 else 0 end) as KEY_DESKTOP,
(case when max(case when FORMFACTOR = 'Mobile' then 1 else 0 end) > 0 and
max(case when FORMFACTOR = 'Desktop' then 1 else 0 end) > 0
then 1 else 0
end) as KEY_MOBILE_DESKTOP
from table t
group by user, access_date;