2026-06
1

月末出bug

By xrspook @ 11:56:48 归类于: 烂日记

好不容易又熬过了一个月末,感觉要做的事情很多,于是你甚至不知道该先做哪个了?实际上我是知道的,在做之前,其实我是有考虑过要不要做一个清单,逐个击破,但是做着做着脑子就跳到别处去了。反复横跳之后会出现我突然不记得下一步要做什么。很多东西实际上都是互相交错的,于是这也导致了我做着做着这个,突然就想到了另外一个,因为中间有些数据在别的地方,于是你正在做的那个做不下去了,实际上你正在做的这个才是重点需要完成的,另外那个属于其实暂时可做可不做,但因为它们的交错,让你不得不把可做可不做的先做了,然后才能把核心的做完。

这个月的业务有点变态,又或者说一开始的时候不是太变态,但随着月末的临近,越来越神经。幸好一直以来我都有反复核对的这个习惯,这个月我发现,某一天准确来说是2026-05-12,某个数据我写错了。数字没有错,但分类错了。为什么会分类出错呢?如果一切数据都是用复制粘贴的方式,肯定没有问题,但关键是那个数据前半部分和后半部分的复制粘贴不是一体的,是分离的,那天不知道为什么我脑子有点进水了。要怎么避免这种事情发生?幸好的是这种事情两年多以来第1次出现,出错概率也不是很高,但关键是会出错,之所以会出错,是因为那天刚好数据不多。所以把某个东西放在类别A跟类别B很难识别得出来,或者说其实也不难,只要我慢下来多看一眼我就知道不对劲了。除了用汇总数据对碰以外,其实可以通过这个分类用别的汇总数测试。简单来说就是其实我有很多个方式判断合不合理。之所以要这样做,因为没有人会给我把关,我只能自己跟自己较劲。现在的情况是做的人是我,审核的人也是我,如果有锅要背,那人肯定也是我,于是我就不得不掌握同一个东西要用不同的角度去观察、审视,确保这个东西没有错。

晚上8点多单位的业务就结束了,准确来说大概是8点15左右,但实际上差不多过了半个小时,业务部门才把数据发出来。其实那个时候我是有点忐忑的,因为我在偷步做汇总,万一还有业务发生,我就得推翻重来,但这一次我又赌对了。我也搞不懂他们到底是怎么回事,有时候隔两分钟数据就出来了,有时候要隔半个小时。我不知道他们在拖延些什么,因为我明明看到他们灯都关了,人都走了,为什么还不发数据呢?

我已经不记得以前为什么我没有月末焦虑,现在的月末焦虑这么严重其中很重要的原因是因为有智能化的出现。要做的东西翻来覆去,多了很多。相比之下,以前的月报真的思路很清晰,没那么多乱七八糟的玩意。现在的那些东西实际上是人肉去核对智能化生成的数据,又或者说以智能化的角度要求人去生成各种数据。

当过职场牛马的人肯定都非常痛恨智能化这玩意。

2026-01
24

就是要用not exists

By xrspook @ 8:30:44 归类于: 烂日记

我知道有一个大表,我也有这个大表其中了一些数据的小表,我需要筛选出除了小表以外的数据,思路非常清晰,但实际上要用Excel里面的SQL实现却好像异常困难。在一些高级数据库里,有特殊的函数实现这个功能,有些用的是except,有些用的是minus,但是Excel里没有。如果可以用except或者是minus,这将意味着可以对大小表全列对比,但是如果用其他方法,只能选取其中一些。刚好我要操作的表有一列刚好是多个列信息的集合,所以用那一列作为标识刚好,但如果我根本没有那一列呢?难道我还得先造一列出来,然后再进行操作吗?无论是用not exists或者not in的方式去进行这种筛选,都只能选取其中的某一列操作。如果是用not in的方式,还得要注意,如果那个小表是空的时候,会导致筛选失效。如果用not exists的方式,则不需要考虑小表是空的情况。

一开始想实现这种功能,我想到的不是这两个,而是用count。先去计算那些有重复项的行,然后针对不同计数结果分别处理。就思路来说很清晰,但就实现来说,很啰嗦。但虽然啰嗦,还是能得出我想要的结果。第一天我用这种计数的方式得到了我想要的结果,但我依然觉得应该有一些更直接一点的方法,于是第2天我就想用not in或者not exists的方式去实现。

not in的方式总算是做到了,但是效率不高,感觉耗时是用计数方式的两倍。in和exists相比,我感觉exists的效率更高,但关键是实际上我使用的是not in和not exist,所以估计还是挺麻烦。虽然就语句来说,不过是多了一个not而已。exists的实现耗费了我不少时间,理论上我的写法没有任何问题,但关键是就会报错。折腾了一个下午都无果。晚上洗澡的时候,我突然想到可能是引用数据简写那里出了状况。在使用not exists子查询的时候。我依然是用经典的a和b简写,但实际上在这个子查询引用的数据里面就曾经出现过a和b。如果某一句查询里面的简写a和b是同一个层次的,没什么问题,但关键是子查询这种操作有递归的感觉,主查询跟子查询不是一个层次。VBA弹出来的报错窗口说某个简写可能指向多个数据。后来我觉得大概是因为之前我就已经有用过a这种简写,层层嵌套之下,exists的子查询不知道我指的到底是哪一层的a。洗完澡以后,我赶紧找文件测试,把主查询的a改为了之前从来没用过的c。果然,not exists子查询通过了!多次测试对比发现not in跟not exists的性能确有区别,not exists会快一点点,但是跟计数相比,好像计数依然是三者之中最快的。从好理解的角度而言,not exists最为复杂,最好理解的我觉得是计数,但是就语句使用的长短而言,not exists和not in最简单的。最后我采用的是not exists的方案,但是not in跟之前计数的方案我都只是把它们注释掉了,没有删除。

如果Excel里面的SQL能与时俱进,我能用一些那些高端的函数,我根本不需要这么大费周折。别人有现成的模块,连个线就能用,但我什么都没有,所以哪怕是一个螺丝,我都得从零开始手搓。

© 2004 - 2026 我的天 | Theme by xrspook | Power by WordPress