00:00
好,那接下来呢,我们看一下这个第二题啊,第二题是给了我们一组这样的数据,什么数据呢,我们来看一下啊,呃,他说电商公司呢,有用户的这个访问时间数据啊,字段的比较少,数据比较简单,第一个呢是用户ID,第二个呢是我们的数据,他访问的时间一秒来。表示的啊,呃,那在这个过程当中呢,他让我们去计算一个什么内容呢?他让我们计算是如果说某个用户连续的两次访问时间间隔小于60秒,那我们就分为同一个组啊,最终也给我们展示了结果,我们可以看一下这个结果,呃,首先呢,他俩分到一个组里边啊,三十四五十六没有问题,然后接下来呢,五十二五六到334超过60对吧?所以呢,诶不能分到一个组啊,不是一了,它的分组不是一,而是一个二,呃接下来五三四二百对吧,间隔200,超过60,呃,又新开了一个组,呃,接下来544,它俩间隔是十,所以呢,它俩都是三啊,那结果呢,也比较明确了,也比较明确对吧,比方说下面638654这个呢,同样的分到一个组啊,那你比方说1002,它们之间其实没有间隔在60秒小于60秒的,所以呢,每一条数据各自形成一个组。
01:21
对吧?呃,那这个数据呢,我还是给他诶拿过来对吧,在这边,然后呢,需求是在这儿啊,最终的结果我们也可以给他拿过来,在这个位置啊,当然同理,我这个表呢,已经建立过了,我给大家看一下,我这张表呢,叫T2表啊,C拉7FROM test2这张表啊,就ID为string啊,然后呢,TS为long值啊呃,OK,那这样的数据呢,接下来我们来写circle,我们去思考这个问题。呃,那分组对吧,那分组条件呢,它俩是。一组。啊,然后这个幺零,它334是一组,然后呢,5345441组,最后呢,这两条数据又是一组,所以呢,我们看到它俩都是一,它是二,它俩都是三,它俩都是四,就是类似于这样的数据,对吧?呃,那遇到这种问题我们应该如何去思考呀?
02:20
大家呢,可以想一想这个问题。啊,大家可以思考一下这个问题。那比方说我举个例子啊,假如说没有这个数据告诉你条件了,对吧,让你自己去分组能不能分。就是说不写hick可的条件下能不能分,可以分吧,嗯,那我们分组的条件是什么呢?第一条数据肯定就是一喽,他第一条嘛,那毋庸置疑它是第一组,下面呢,就看它一不一样好,第二条我们应该怎么去分析的,诶256减234啊这个22 22呢小于60,所以呢唯一。
03:01
对吧,好,这是1002,我们先不看对吧,先考看1003,呃,1003这个是334256,超过60了,所以呢,你另开一组二。对吧,注意这个是大于60的,或者说大于等于60吧,因为它小于60分到一个组啊好,那接下来呢,这个是534534呢是200也是大于等于60的,然后呢。给个三啊,这个时候呢,我们应该给个三。好,那继续544跟上一条534,诶这个是十对吧,小于60,好,那这个呢,也是三跟上个保持一致啊,那同理638呢,这个就给四了,这个也给四了,也就是说这是不是我们对到这个数据,如果自己考虑它的一个分组,是不是这样的一个情形啊。这个没问题吧,大家应该都能够同意的,其实仔细想一下,我们在思考的过程当中呢,是不是每一次把这两个数据干什么。做了一个比较啊,所以第一步咱们应该是不是把上一条数据给他。
04:05
拿下来你才能去相减做比较吧,因为嗯,这两条数据你直接减,有办法减吗?减不了的对不对?所以我们要按照用户分组,然后按照时间排序将上一条数据给它移下来,那这样的话,我就能用后一条数据减前一条得到一个值,对吧?假如说我们叫flag或者说差值,那我们利用这个差值呢?呃,大于60还是小于60做一些处理,对吧?所以第一步啊,将上一行数据啊下移啊,呃,当然呢,下移的不是整个的数据,而是上一行什么数据啊,时间,也就是说我们的TS数据做一个下移,那这个我们可以开个窗就OK了,对吧?当然呢,大家想一下,那上移下移呢,有两个函数,一个是lead,还有一个是leg,呃,那大家思考一下,这两个哪个是上移,哪个是下移,就是说哪个函数代表的是将这条数据放到第二行。
05:06
哪个呢,是将第二行数据放上来。嗯,大家就是第一反应能反应过来吗,现在。啊,好,那也给了一点时间大家去思考,那我们去揭秘啊,呃,其实这种方式呢,死记硬背你迟早会忘,那从单词的角度来说,对吧?那lead呢,代表着领导的意思,对不对?哎,我知道谁,那那呢表示延迟,OK,好,那从两个单词的意思出发,我们就知道,你比方说我要把下一行移上来。啊,那我是第一行,你跟在我后面对不对,那我是你的。琳达。啊,他领导的数据,因为都是以当前这条数据作为标准,对吧,以当前这条数据作为标准,所以呢,这个时候应该用lead,而如果说我把这个第二第一行数据放下来呢,是不是第二行,因为还是站在当前这条数据角度而言嘛,那第二条数据是不是相当于第一条数据是延迟。
06:10
对不对啊,所以呢应该用like,那咱们这边呢,下移其实就用的是like对吧?好,那select啊,嗯,然后呢,保留数据ID要保留,然后原始数据TS保留啊呃,然后呢,这是两个字段,然后接下来我们把下移啊下移呢我们刚才分析了用like,那问题是like函数当中应该这个地方我们要先传一个DT,然后呢,下一行我们可以给它一个默认值,因为不给默认值的话,对于第一行数据而言怎么样?它就是个浪了,那等会减的时候就不太好减了,呃,那我们可以给一个默认值,诶,浪零对吧?我们可以给一个零,因为它是浪类型嘛,所以我可以给一个零啊,给一个这个数据,好,那这个是上一行的数据,叫like dt啊,Like DS吧,Like ts啊,行,呃,当然了,这边少了一个开窗啊,Over啊,开窗partition啊,在这个同一个用户内去开窗,然后呢,按照时间做排序,All the by,呃,TS对吧?好,然后from咱们的这张表,我们表呢叫TEST2这张表对吧?好,这个呢是T1表哦,我们可以把这个内容呢做一个测试,看一下这个我们这个有没有写错对吧?啊,Lead LA这个函数啊,这个当中说我们至少有一个分组条件是吗?呃,那我看一下from like这个函数啊。
07:40
呃,叫DT啊,这个地方我们写错了对吧,应该是TS啊,应该是TS,不是DT啊,OK,因为上上一个需求我们写的是DT啊,这还写的DT呢,应该是TSOK,我们把这个重新运行一下,一个小失误对吧。好,那这样呢,就运行起来了,对吧,那我们等会看一下这个数据啊呃,那如果说我们刚才分析力的那个对的话,那么第一行数据,每个用户的第一行数据应该是个零对吧?然后接下来呢,是将上一行呢下移了意思。
08:14
那我们稍等一下,呃,这个结果。等会我们可以把结果粘贴过来,OK啊,那是这样的数据,我们把它拿过来啊,这就是我们期望的这种数据,对吧?期望那种数据,诶这个粘贴四,诶这个没有复制上啊,我重新去复制一下,然后呢,把这个放在这儿,那我们来看一下,呃,234作为第一条数据,你看此时呢,已经同一个用户放在一起了,然后呢,按照按照时间的大小做了一个排序,对吧?呃,第一条数据为零,第二条数据呢,把第一条234移下来了,5256,诶这个是334啊,那这个没有问题,那第二步呢,就是说这两个时间要做一个什么相减对不对?好将当前行数据减去上一行时间数据。
09:04
啊呃,那这个地方呢,应该是时间数据啊,减一下啊,那这个呢,也是比较简单的,那我们select ID对吧?然后接下来呢,是我们的TS先保留啊,然后上一行的ts leg ts啊,那我们就得到leg ts,那我们就用这个嗯,TS保留,然后TS减去上一行的叫leg ts,这个呢是TS的diff啊,就是它的一个差值对吧,Ts diff啊然后from呢,我们的T1表啊T1表这个呢,我们叫T2 T2数据好,那这个呢就比较简单,我们可以也单步的把它去运行一下吧,啊那这样啊,这个拼接好,然后呢,括号加括号,把这个T表呢拿过来啊,以后大家写所有的时候也可以这种方式啊,就是这样比较简单一点,OK,那我们把这个呢粘贴运行一下啊,走你。
10:04
其实到这一步为止呢,都是一些比较常规的思路,我们只是从我们看到这种问题,然后呢去思考,把思考的过程稍微的去写了一下,然后接下来呢,可能就会比较麻烦一点,需要我们动动脑子了,啊刚才呢,只是说我们看到这种问题之后做的一个处理,对吧?啊,做的一个处理是这个意思啊行,那这个呢,我们去解。
我来说两句