00:00
好,那现在我们看七天内连续三天的这个四路二,这个四路二其实跟四路一这个本质上比较像,比较像,那现在呢,我们这样啊,我们把这个,呃,把这个来来咱们再做一下啊来我把这个先删掉,呃思路我先把这个数据处理一下。其实这边呢,跟他没啥太大区别。嗯。好,那咱们接着走啊,咱们接着走。诶完了,这又跑哪去了,诶我这数据呢,哎,在这儿呢,啊,这我们要想算这个,用这个思路二去算,其实咱们所需的原始数据,其实还是那部分,是不是还是得拿到每个用户他七天内的所有的这个登录天数,呃,登录日期啊,对吧,还是得拿到这个东西啊,那接来看文档思路,什么样的文档思路我就直接写了啊,这个确实不太好讲啊,确实不好讲啊,来我们看他怎么做的,他就是这么做的啊。他这儿呢,也用了开窗了啊,也用开窗了,然后怎么开在这加一个啊,比如说加rank啊,加了一个rank。
01:05
那那rank里边咱是不是也得写over,也得写这个part by呀,对吧,Part by part by后边也得什么O啥的,那这个part by它按照谁分组呢?也是按照设备ID分组,那按谁排序呢?也是按照DT排序。啊,123排序啊,你看这最终怎么做的啊,再往下走,哎,那完了之后,你排完序之后,这块是不是会有什么123456啊对不对,那这边比如说这是一。哎,CTRLC,那这边呢,我们来一个啊,这个CTRLV,诶这个怎么不对齐呢,这是一啊,这个是二啊,那这个呢是CTRLV。All right。我先写上一会再改啊这二。这三啊,这个是四啊,这个是五啊,这个是这是六没错吧?啊,因为咱们是按照他分的组,这是不是在一组里边按他排的序,那是不是123456,没错吧?诶然后涉及到这个NK函数了啊,咱们大家学过三个对吧,一个rank,一个dens rank,还有一个是row number,这仨有啥区别呀。
02:08
Rank跟density rank它俩都是啥?都是排名对不对啊,都是排名,那它俩有啥区别啊,Density density什么是密度的意思,更密集对不对,密集排序啊,密排序,那也就说什么时候有区别,就是那种并列的会有排序会有区别对吧?比如我这有并列第一,那假如说有俩100分啊,俩100分,那俩100分,如果说我用rank去给他排序的话,那你得到这个应该啥样的,应该是一一,那第三名就是多少了啊,这就这就是三了,对吧?啊,因为俩100嘛,那第第二名,比如99,但是他排第三啊,那登rank呢,就是一一。二对不对,那row number呢?Row number的不管你的牌子相等不相等,我是row number本质上是啥呀?行号吗?Row number不是行号吗?就是123456对不对啊,就是这样的啊,那咱们这儿呢,其实在这儿大家你想你想一下啊,我们如果是按照mid分组,按日期排序,那你说我们这个三个排序函数,你说他们仨有区别吗?
03:07
没区别,为啥呀,因为我们DT去重了,不可能有相同的,所以说是不是肯定是用谁都一样啊啊所以说咱们这比如用RA,那得到它用到它之后呢,咱接下来怎么做啊,接下来你注意观察了,它这么做的啊,它让谁啊,让这个日期去和我们的run函数啊,也就是咱们那个排序的那个序号做了一个减法,当然这个减应该用谁减,应该用data sub或data a减,对吧,因为是一个日期减一个int值对不对,那减完之后你看这个结果是什么样的啊,咱们先不说原理,先看效果,它减它等于几。六月十几。是不是六月13。没错吧,啊,这个是六月13。啊,63啊,我先把这个下边补补全啊,CTRLC。啊CRV啊,一会儿再改啊。
04:01
好,那我们改一下啊,那14减一等于13 15减二等于13 16减三也等于13吧,18减四等于几等于四,那19减五等于几等于四,那是20减六也等于四吧,哎,你其实能得到一个这样的一个现象啊,你看啊。先注意观察左边这这仨是不是连续的,那它们相减之后结果是不是相同的,那这也连续的,这是不是也是相同的,然后呢,中间是不是有不连续的,那这块是不是不连续,不连续它俩结果不同。是不是得到一个这样的一个规律啊,那其实这个规律很简单啊,这个什么怎么样的一个规律啊。你注意观察rank咱们肯定是啥样的,肯定是连续的,就所谓连续,其实这这块相当于一个什么呀,一个等差数列对吧?啊,而且这个等差数列的公差是多少啊啊一就是这个下一个元素跟上一个是相差是一啊,那日期呢,日期如果也是连续的话,那是不是相当于也是一个等差数列,公差是不是也是。一啊也是一吧,公差也是一啊也是一,那既然这样的话啊,两个公差相同的这个等差数列,那进行这个。
05:07
就是相当于,就是挨个的元素进行相减,那他们得到的结果是不是肯定是一样的呀,对不对啊,因为什么?因为它俩相加完之后啊,等于,比如说等于这个值,那下面这个值跟上面差差几是不是差一,那这个值呢,这个值跟下面那是不是也差一,那它俩再相减是不是结果肯定跟上面那是一样的啊就是这个道理嘛。啊,就是这个道理啊,相当于这个加一减去这个加一,是不是这加一就直接抵消了呀,那所以说哎,如果两边都连续,那我这个差肯定是相同的。啊,如果不连续肯定就不相同,那所以说这块呢,咱们就可以根据这个特性呢,来去找那种连续的啊,咱们怎么找啊啊,你是不是得根据这个字段去找了呀,啊跟这个字段去找了啊,怎么跟他找啊。你就得找一下啊。这个差值相同的一共有一个,如果差值相同的啊,这个行啊,我有三行以上,那就说明什么。
06:10
那我说明前面对应的这个日期是不是有三天以上的连续啊,没错吧,啊是这样的啊,那所以这块呢,你就可以根据这个去判断了,那这个怎么去判断呀,那怎么去找啊,怎么去找啊,怎么去找。数据已经摆在这儿了,原理也已经讲清楚了,怎么找到这个连续的设备,ID怎么找?啊,刚才说了你得找相同的,就是结果相同的有几个对不对?怎么找结果相同有几个呀?那最简单的方式,按照这个差值进行分组是不是就行,分完组之后进行count对不对?Count的结果如果大于等于三,那就说明是不是相同的条数有三条以上,有三条以上就说明它对应的日期是连续三天活跃,没错吧?啊,当然你分组的时候不能只按照这个字段分组啊,还得加上谁。
07:03
还得加上它,为啥呀,因为我们这个是不是所有用户啊,这个一起算呀,所有用户一起算的话,那是不是其他用户它的差值也有可能等于13对不对,如果说你只按它分组,那就混了啊,就乱了,所以说还得带着mid啊,那当然啊,你带着mid分完组之后呢?啊,我们会把1001找出来,那这三条是会会分到一组里,因为你得带着它分嘛,啊两个字段分组就是什么样的分到一组里,就是两个字段都相同的分到一组里,对不对,相同相同在一组,那这是不是会得到一个1001,那下面这个是不是另外一组了呀,也是一个101,所以最终还得怎么做驱虫啊,还得去除。啊,这是咱们文档上这个思路。啊好,那接下来咱们把这个思路也去实现一下吧,啊,还有15分钟啊,咱们抓紧一点时间啊,这个我们一起写啊来。好,那这个具体怎么做,具体其实做法跟刚才那个没啥太大区别,是不是还是先拿到这个原来的这个数据啊,只不过咱们这儿不要这个啥了,不要这个例的了啊,我们先把这个往前推一下啊,Shift的table先推到开头啊好,那你说这个我们应该选谁?
08:09
是不是加NK呀,对对,这有区别了啊,这个rank啊,Rank后边over over part by by谁by midd来下回加mid,呃,我应该前面写错了啊,T ion啊,然后by mid order by呢,Order I by dt吧,DT咱们这也是让它生去啊,也让它生去,因为这儿呢,你是相减对吧,你要相减的话,你必须得怎么样。是不是这两边这个升序降序得是一样的呀,那假如说你这个日期要是按照降序加。那你说这个还能减吗?一会儿就不能减了,就得加了,对不对,你要按降去的话,那相当于呃,这个是这个是不是,这个四应该是对应的是六,那这个对应的是五,这个对应的是是四,你看注意观察,那他们是不是相加之和就相同了,对不对,这是20,这也是20,这是不是也是20啊啊如果你倒叙你就得加降序,呃倒序的话你就你就加啊,如果升序你就你就减就行啊,这个规律自己摸索一下就行啊啊已经拿到它了,拿之后呢,咱们这起个别。
09:11
几个片名全没了,2K啊,好,那现在接着怎么做?接着是不是咱们需要让这个东西跟他做一个减法,对不对,那咱们还是为了清楚一点啊,咱们来子查询括号来CTRLV。啊,这往前推啊,这个来T1吧,啊T1,那T1的话我们select select呢。来咱们from啊from它,那from它之后呢,我们选选什么呀?是不是需要让这个日期跟它相减对不对,那减白,那就那是不是得用date a或date s函数啊d date啊,比如说用I的吧,用I的话这怎么写,应该是DT逗号,注意的是负2K啊,你是减对吧?啊是减,如果是data s就是正RK呗,啊得搞清楚,那完之后咱们还需要选选谁呀?M mid是不是也得选出来呀?啊m mid选出来。
10:02
M mid啊选出来好,那选完之后呢,这俩值其实就没用了啊,这俩字都没有,其实咱们要的就是它对吧?啊两面是它,那OK,把它选出来,选出来之后呢,这起个别名叫D。啊,好,那现在我们相当于已经得到了这样的两个字段了,对吧?那接下来咱们要做的事就是按照谁按照m midd加它分组,然后呢,把count性等于三的大于等于三的过滤出来吧,啊,OK,那咱们开始呗,啊好,那先从它这开始选,那这个再来一自然询吧,那咱们更清楚一点吧,S。From啊,带括号啊。来推一下CTRL,诶,咱们把这个往前推。啊对,好,那这个学变名叫T2啊T2好,那开玩之后呢,是不是格BY了,格BY谁格BY是不是加上mid,再加上那个,呃,那个diff吧,那个差值啊,是不是按它分组,按它分组之后呢,我们需要加一过滤条件的,咱们得过滤组吧,Having什么样的,是不是也是count星得什么样的,哎,大于等于三的啊。
11:11
啊,大于等于三的找到啊,那找到之后呢,我们上边选什么。这回选什么,是不是只选m midd就够了呀?那其实这个结果啊,返回的应该是几?就以这条数据为例,以这条数据为例,你说这返回的应该是什么?几行?两行对吧?啊几列就一列,Mid你就选一列嘛,相当于你得到了两个1001吧,对不对,那所以这时候咱们需要怎么做,需要对mid进行驱虫,驱完虫之后呢,再进行来countt对不对,那所以这呢,咱们得先以这个作为一个子查询CTRLX啊来括号。CTRLV啊给它推进来,这个往前推一下啊,这边呢,我们来T3啊T3啊在T3完之后呢,我们这儿呢,需要是不是去重哎jup啊啊mid吧啊那下边咱们选啥。
12:05
Select。SE啊来from,那这回就能选了吗?能选看到了吗?不行,还得选mid,因为你下边是有分组啊,对不对,你分组之后,你相当于对m mid是不是得先去个重,去完重之后是不是再来一次安全,对的进行count呀,你得到才是最终的结果啊,还得CTRL x1下来再来个括号。啊,CTRLV来我们把这个。往前推一下。好,那select select from啊,From这个下面这个啊,咱们取别名叫T4吧,啊,T4上面我们选一个count星啊。哎,有问题。可能性好,那到这儿呢,我们才是最终把这个思就写完了啊,那当然最终呢,你需要给他跟上面一样啊,给他补上这个相关字段,然后再插入到这张表里就行了啊好,这是我们这个第二种思路啊好视频录一下。
我来说两句