00:00
好,那刚才呢,我们写的第一种方案,第一种方案呢,就是说用这个等差数列啊,最根本的等差数列的一个思想来做的这个事情,对吧?呃,那。接下来我们的问题出在哪呢?如果说他不是算断一天也算连续什么断两天断三天这种就很麻烦了。对吧,因为我们要套娃一样嵌套很多层,所以呢,我们来看一下,那现在呢,无论你断一天,断两天,断三天,反正你条件肯定有一个条件定下来之后,无非就是说一个分划成了一个分组问题,对吧?现在也就是说你要把它们划分到一个组里边,因为他们呢中间是有缺一天的,那然后把他俩划到一个组里边,他俩中间呢也是缺一天。对吧,那如果说我们能来一个组ID,把他们划分到一个组里边,是不是就搞定了。
01:05
对吧?好,那他们划分到一个组里的条件是什么。就是说要不然连续,要不然断一天是不是。大家想这个问题啊,就是说这些数据能放到一个组里边,他们的共同条件是什么?是不是有的是连续的相减等于一和相减等于二的。对吧,两个日期相减是不是等于一或者等于二都可以啊。对吧,是不是好,那首先第一步我们来做这个事儿。对,差值小于等于二或者说小于三都可以等于一或等于二对吧,所以第一步我们先做什么事的。
02:06
四。对吧,然后呢,我们写一个2.12.1,那就是说将上一行数据移下来对吧,加上一行数据下移,下移一行。对吧,然后做差好select下移用什么。这是ID,然后呢,DT保留下移对吧,用lead还是led。啊,对了,那好括号,然后呢,我们指定DT这个列吧,呃,应该是一在前,对不对,一在前,我记得一在前,然后呢,DT下一行,然后给一个默认值。
03:00
那他觉得这个默认值给多少合适呢?你要不给默认值,它第一行数据是不是就是一个none。这个你做减法不太好做。对吧,那默认值给什么呢。给0000是吗?啊可以啊,就是一般一般来说啊,一般来说像这种下移的。我们一般就给一个最小的值就行了。给个他啊,因为它第一行数据没有值嘛,对吧?啊,如果说是上移。如果上移呢,我们一般给9999杠九九杠九九啊一般是这样对吧?好,那这个呢,我们O开窗括号。
04:03
还是一样的part by ID对吧,All dt all by dt,这个呢,我们叫like dt。From我们的腾讯表啊,这个呢作为T表,然后呢,我们统一写完啊第二个2.2,那就是说将当前行日期减去下移下来的日期,对吧,将。当前行日期减去。一下下一的日期。好,下一个日期,好,那这个呢很简单,Select。Ad,然后呢,DT保留对吧,下一个日期我们做一个减法啊,那就是date d。啊,用当前日期减去下移的BT。那这个呢,叫DT。
05:01
Diff。好DD对吧,我们取这样的一个名字,好,然后呢,From。我们的T1表好,那现在呢,我们这个是T2表,我把这个结果给大家看一下。对吧,把这个结果来看一下啊。看一下它长什么样子,接下来我们决定后续如何处理。看一下at least one group。我是少写了什么东西吧,我看一下啊。DT。Data diff,嗯,稍等,他说我们这个地方。有一个分组,我没写分组啊。
06:04
啊那啊这个记反了,这个应该是先写这个是吧。Dt e。啊,DT一行,那我把这个改一下啊,DT1是吧,先写字段再写这个,我把这个测一下啊,但是刚才他说我们这个分组有问题对吧。好,那我们先把这个结果拿到来看一下。看一下我们的执行结果啊。好,那大概长这样子还是一样的。我只拿一。啊,我只拿一这个数据对吧?啊把这个放在这啊,然后为了好看一点,我把这个结尾呢也给它放上,好,那我们看啊来它这个数据呢,因为我们拿着它是减的那个1970,所以它这个值特别大啊接下来一一哎这个呢是二这个一一啊那也就是说我们实际上是要把这个数据。
07:21
分到一个组里边啊呃,第一条数据不算,第一条数据不算对吧?啊,那接下来呢,把这个数据分到一个组里边。有一个点在于你看啊这个分组。能看到这个分组的规律吗?这个组呢我们叫一,这个组呢叫二。分组的规律是什么?
08:01
对。大于等于三或者说大于二是不是?大于二的我们就分一个组吧,你看它大于二分组,哎,它不大于二,不大于二,不大于二不大于不大于二就放在同一个组,对吧,分组条件是大于二,就是这个数据大于二就分组是不是对吧?只要它大于二,我们就要做分组,那你看又大于二了,我们要做一个分组,那关键是如何能把这个值。这些东西变为一,他们呢,有一个共同的一,它有一个共同二呢,这个怎么做呢,从S上面怎么做。看我刚才都说了,每遇到一个大于二的就分组加一。注意这句话啊,叫每遇到一个大于二的就分组加一。对了,是不是some if呀啊some分组对吧?好,那接下来呢,我们就1.3啊不对2.3。
09:04
分组好,那分组怎么写呢?谁来的ID dt对吧?然后接下来是分组,So。If if呢有两个条件啊,三个参数对吧,一个条件两个值啊呃,那呢是data塔,我看一下应该是dt Di对吧?DD dif,如果说大于二,大于二我们就给个一,否则小于等于二的我们都给零。对吧,那这个呢,分组叫flag。啊,就分好组了,那接下来呢,我们from。应该是TR表。对吧,应该是T2表,这个呢,自己作为T3啊,T2表呢,往这一放CTRL啊,把这个我们也测一步啊来。接下来呢,把这个来运行一下。对吧,这是我们的分组,哎,我们分组了,我看一下上我少写了一个东西对吧。
10:04
上写了一个group。If,然后这个地方,嗯,分组啊,我们go back。呃,但是呢,有一个问题啊,这个地方some if,我们不用go,我们少写的不是go,我把这个在呃,From,对,要做一个开窗啊,第二对这个地方没做开窗,Overval括号,呃,那还是一样的partan by按照ID,然后all by按照什么这个DT啊,开窗啊,少了一个开窗不用不用做,因为刚才提示倒没有问题啊,提示因为有正常的这个值,刚才少写的这个啊,行,那我把这个拿过来,T2前面我加一个括号对吧,把这个拿过来啊。往这一放啊,那这个分组搞定之后就简单了,对吧,只要分组过去了之后呢,我们就把组内最大的日期减去最小的日期加一就好了,对吧。
11:22
嗯。我们看一下这个结果。啊,就是我们看到后面呢,都跟着一和二这样的数据就对了,对吧,然后呢,按照ID跟我们组进行重新分组,取最大值最小值相减就好了。对吧。好,那这个地方呢,就搞定了,我们还是拿这个一这个数据啊来看。
12:04
啊,这个结果呢,我给它陈列到这个位置。啊,这个我就不粘了吧,看啊是不是把这个分到一个组里边了。哎,这个也分到一个组里了。对吧,那我们现在要做的是按照ID和这个组哎,做一个勾半,然后呢,拿最大值减去最小值B加一是不是就好了。对吧,做这个事情好,那我们想着这个地方呢,有也有一点小问题啊,其实老版本可以直接这样写,但是新版本呢,他不让我们这样写啊,本来可以怎么写呢,Select的ID对吧?然后呢,这个地方直接写data d括号,然后是max啊如我们看其实老版本可以直接写,但是新版本不让我们这样写了,然后呢,Me对吧。Ad,我把这个flag保留啊,给他看清楚一点,Max谁呢dt me谁呢DT对吧,求最大值最小值,然后呢加一。
13:00
加一对吧,因为一号到七号是七天嘛,对吧,那你七号减一号,它是六六的话加一嘛,啊变成七天,所以这个地方要加一啊,要加一得到最终那个什么呢?This啊,那这个我就不要from。其实老版本可以这样写啊,但是新版本呢,不让这样写了,那我们给他看一下啊呃,然后from这个TT级别了。这个是T3表对吧,T3啊from t3表。然后。这个ID和flag。对吧,T3好,那我们把它做一个测试啊。把这个拿回来看。嗯,这样吧,我把这个先。看到没复制到这啊,我把这个再复制一层。想呢,可能到最后呢,我们好看一点,每一步的思路清楚一点,对吧,这个是T3这个啊,我把它拿回来。
14:00
CRX把它放在这,然后T3这个是T4,因为最后呢,我们可能还要做这个最大值嘛。拿过来啊,然后我们运行一下。来20ID不在分组字段里边吗?我没写这个分组字段吗?ID flag。ID flag啊,这个地方还是有问题是吧,我看一下啊,我先把这个干掉,呃,在之前的基础上,咱们是有ID有flag的,然后呢,有DT对吧,面最大值最小值D。这个东西,然后我们重新去粘一下,重新粘一下往那一放,然后T3前面加一个括号对吧,应该ID是有的,这个是有的,他说我们这个ID不在分组字段里边,我重新做一下啊,因为刚才呢,粘贴复制,粘贴复制可能搞得很乱啊,我重新做一下这个事情。
15:02
这就好了啊,刚才应该是我看一下啊in group ID。第二个就说我们这个字段,第二行这个字段有问题对吧?啊,但是应该是刚才粘过来粘过去有一些问题啊,那不管了,这个就搞定了。少复制了是吗?啊,那可能是少复制东西了哈。那少复制东西了肯定就有问题啊,但是呢,报的错其实在我们搜当中不容易看出来对吧,因为我们是加了那个什么group,那这没关系啊,我们重新弄一下就好,对吧。我们前面的都运行了,没写错对吧。少复制了GOID是吗?啊,那那报错就没问题了啊,就刚才没注意啊,没注意可能少复制了这勾ID,肯定就报这个错了对吧,确实他报了错也没问题啊。呃,那我们看一下这个结果。
16:19
这边运行还是蛮慢的,对吧,因为是MR疫情。好,那这边呢,就得到了一个结果,7339,那然后再做一步就求最大值了吧,对吧,因为我们要求最大的连续天数嘛,最后呢,答案也是七和九啊,再签到一层,最后这一层呢,我就不写了啊,不写了,呃,那这里边我之前说有一个bug,因为有的同学在写S克的时候呢,很有可能会把这个A到Di这样的方式啊嗯,那看啊,比方说这一步。哪一步呢,这里边儿有一部这样的操作,嗯,稍等啊叫。
17:03
Data Dis。日期,我们要做这个减法leg。啊,对,这个。这个。实际上我们这两步呢,可以合并,大家上合并对吧?啊,那我可以直接把这个写进来。小起来,也就是说它有一个bug,什么样子的,有同学已经知道了,对吧,这里面有一个bug是在于我,我稍微写一下,我先把这个整理好对吧,这个呢,就是我们最终的一个结果了啊,然后呢,我把这个拿过来。思路二啊,这个方式呢,就能更好一点啊,那首先我们把这个聊完啊,在我们用思路二解决的时候,如果说这个地方改断两天也算连续,我只要动这一个地方就够了,对不对。大家想一下,是不是如果说要求断两天也算连续,是不是这个地方改成三。
18:00
如果断三天算连续就改成四,断四天就改成五。有没有问题?就是分组的时候,分组条件在变,你断几天算连续,我就把这个N加一对吧,算到一个组里边就好了。啊,那也就是说这个S呢,就是最终就长这个样子,你就这样写就完了。对吧?啊,那如果说条件在变,只需要改这一个位置就够了。啊,比我们第一种思路要好太多了,是不是第一种思路的话,那你想想看,只要多加一层,你要多嵌套一层,多加一层,多嵌套一层对吧,好。
我来说两句