现有每个手机号绑定应用版本,平台,公司名称,店铺名称及账号绑定时间等数据(如图一所示);
现要做一张表可以用来记录店铺的换绑信息(如图二所示),店铺的每次换绑动作都要被记录,比如一个店铺换绑5次,就要有5条该店铺的换绑信息;
且应用版本,平台,店铺名称加起来唯一确定一个用户(也就是说两个店铺的名称一样,但所处平台或应用版本不一样,就是两个不同的用户);
换绑的情形只有一种:某家店铺本来在A公司下, 现在切换到B公司下,店铺每次绑定到公司下都会被记录,记录的信息如图一。
图一
图二
请仔细阅读问题遇到的现象及发生背景,感觉我没有解释清楚的地方,评论区随便问哈。
首先这个肯定是用lag开窗函数分组取上一行,
但是,题目中出现一个矛盾的地方,
"应用版本,平台,用户名称加起来唯一确定一个用户"
如果是这样,那为何在图二中,会出现两个用户名称?如果用户名称会被修改,此时如何确定它改之前是谁?此时图一中仅根据应用版本和平台是无法确认唯一用户的。如果用户名称不改,那么图一里变化的仅仅只有一个绑定时间了
另外,"换绑"到底是种什么操作?有哪几种场景?每种场景可能会修改什么信息?
题目改了后,这就是个最简单的lag开窗函数的应用场景了
select 应用版本,
平台,
店铺名称,
lag(公司名称) over(partition by 应用版本, 平台, 店铺名称 order by 绑定时间) 公司名称1,
lag(绑定时间) over(partition by 应用版本, 平台, 店铺名称 order by 绑定时间) 绑定时间1,
公司名称 公司名称2,
绑定时间 绑定时间2
from 表
方案如下,dao.getInfo和dao.insertBingdingInfo为自己声明的方法,用于从数据库查询和新增数据,如果有所帮助,望采纳
/**
* 记录用户绑定信息
* @param version 版本
* @param username 用户名
* @param platform 平台
*/
public int insertBingdingInfo(String version,String username,String platform){
//根据条件查找是否已经绑定
Map<String,Object> bindInfo = dao.getInfo(version,username,platform);//查询数据
if(null == bindInfo || bindInfo.size() == 0){ //如果绑定信息为空,说明没查到,记录数据
dao.insertBingdingInfo(version, username, platform);//记录数据
return 1;
}else { //如果绑定信息存在,说明绑定过,不再操作
return 0;
}
}
同求sql语句