sql查询精编

1.留存用户的计算问题

涉及表格和字段如下

member 表是用户信息表记录用户注册时间、注册设备和其他相关信息

login 表是登录日志记录每个用户什么时候登录

sql查询精编_第1张图片

备注:一个用户可以在不同的设备登录,一个设备可以登录多个用户,member表是以userid(用户编号作为主键),两个表以用户id为主键相连

第一步,把日志依据时间和用户整理成 一天 一用户 一设备 的情况,换而言之我们需要用户每天第一条的登录信息我们新生成这样一张表 

SELECT DISTINCT   A.id, A.userId, A.userIp,

CONVERT(VARCHAR(10),A.loginTime,120) AS  LOGIN

FROM

dbo.T_dance_login_log AS  A  /*使用别名*/


 

第二步,把两张表做关联

通过关键字段userid计算,把member 表和 第一步查询的结果表联合到一块,这样我们得到下面一张表


第三步,选取我们需要的字段,对日期做差,进行分组求和,这里需要注意的两点  1.用member表的device  2.用关键词distinct去重

事已至此大功告成

-----华丽丽的分割线

接下来可能有这样的疑惑,能否把求差后的日期,变成列 我更希望得到下面这张表或者    更好

这就要用到case  when语句,这个语句的基本工作原理是这样的

你可能感兴趣的:(sql查询精编)