上一篇介绍过数据差距与数据岛的背景,这里不再赘述,请翻阅上一文。此篇在Sqlserver上给大家演示1000万条记录的计算性能。

测试电脑软硬件说明

一般般的笔记本电脑,2017年7月,价格:4500+。

电脑配置

数据构造

1000万行数据,由10万个用户+每用户100条记录组成,同样使用书中所提及的构造序列的表值函数轻松构造完成。

同样使用窗口函数完成的表值函数

生成1000万条数据记录

数据源结构

使用循环和随机函数,实现删除10万条数据,因测试时先建了索引再删除数据,慢得一塌糊涂,最终中途中止了,没有实际删除这么多数据。

随机删除10万条记录,用于实现数据差距和数据岛效果

关系型数据库,性能优化的核心是适当的索引,此次肯定要加上索引才能客观地表现出该有的合理效果。

增加聚集索引

算法代码演示

数据差距范围

此部分计算的逻辑是将每个用户分组下本来连续的序号中,缺失了某些记录,这些缺失的部分对应的区间范围,若缺失的为连续的,返回连续的区间,若缺失为单个记录,返回首尾相同的序号。

数据差距的SQL代码及结果

原理:关键思路是使用LEAD函数,使用“用户”列作分区,按序号的升序排列,取当前用户组的当前行序号为cur列,其下一行内容作为nxt列,最终构造结构表是,将当前行的cur列值+1构造出差距的首范围,当前行的nxt列值-1作为结束范围。

而最终的结果只会取nxt和cur之差大于1的记录,即开始有缺失产生差距的行记录。

总记录1000万条,10万个用户,分组计算后,返回数据产距90899条记录,用时27秒

分解下步骤,将CTE虚拟表C给大家看下效果,可以看到97和100之间是缺失了98、99两值,最终在97序号上,cur为97、nxt为100,此行记录是我们后面where条件要筛选出来的记录行(模拟删除数据过程中,尽量删除连续的两条记录,让差距结果更清晰)。

将cur+1,nxt-1后,就拿到98-99这样的差距区间。

分步骤演示

数据岛范围

这个就是一般来说连续记录的区间,如现实场景中的用户连续打卡天区间。10万个用户测试,100天打卡天数,足够满足一般互联网中等规模的活动场景使用。

数据岛范围的SQL代码及结果

原理:使用排名窗口函数,对用户进行分组计算。若有数据缺失时,排名的序号和正常序号之差会有跳跃性的差距(正常无缺失时序号和排名是相同,且差异为0)。

下一步对排名产生的相同的数值进行分组汇总,连同用户字段,最终可统计出某用户在某个差异值grp下的连续区间。

分解步骤后可知,在用户1中,58后缺失了59、60两个值,最终在61的排名与序号差grp为2,直到下一次有缺失时,此2的值再更新为下一个缺失的值区间长度2+2=4。

分步骤演示

下一个缺失值为98和99两值

结语

Sqlserver的窗口函数,非常多的应用场景,对传统的SQL的查询进行了极大的简化,在PowerBI的DAX查询语言中,暂时还缺少其在集合的基础上进行窗口的处理,致使同样都是对数据集合进行运算,但因为缺失窗口函数特性支持,性能上仍然和SQL中的窗口函数处理有非常大的差距。

现实场景更靠谱的是日期维度的数据序列,日期和序列原理一样,只需使用DateAdd函数处理下即可,书中也有相应的例子,有兴趣可自行翻阅。

想必有人好奇地问,这些内容在其他数据库中是否同样可以?窗口函数在其他关系型数据库中是否也一样支持?

据笔者知识范围所知,MySQL和Sqlite是没有的,Oracle是有的,并且比Sqlserver更强大(为何不推荐,因为笔者是微软系的信徒呗,Oracle人家是法务团队强大,你懂得)。

以上所使用到的截图SQL语句,可公众号后台回复【数据岛】获得文本内容,立马可以在自己电脑上搭建环境自行验证分析,也期待你的更多留言、评论、转发等互动参与,好让笔者更有激情地分享更多精彩内容。

关于Excel催化剂

Excel催化剂先是一微信公众号的名称,后来顺其名称,正式推出了Excel插件,插件将持续性地更新,更新的周期视本人的时间而定争取一周能够上线一个大功能模块。Excel催化剂插件承诺个人用户永久性免费使用!

Excel催化剂插件使用最新的布署技术,实现一次安装,日后所有更新自动更新完成,无需重复关注更新动态,手动下载安装包重新安装,只需一次安装即可随时保持最新版本!

Excel催化剂插件下载链接:https://pan.baidu.com/s/1Iz2_NZJ8v7C9eqhNjdnP3Q

联系作者

公众号

取名催化剂,因Excel本身的强大,并非所有人能够立马享受到,大部分人还是在被Excel软件所虐的阶段,就是头脑里很清晰想达到的效果,而且高手们也已经实现出来,就是自己怎么弄都弄不出来,或者更糟的是还不知道Excel能够做什么而停留在不断地重复、机械、手工地在做着数据,耗费着无数的青春年华岁月。所以催生了是否可以作为一种媒介,让广大的Excel用户们可以瞬间点燃Excel的爆点,无需苦苦地挣扎地没日没夜的技巧学习、高级复杂函数的烧脑,最终走向了从入门到放弃的道路。

最后Excel功能强大,其实还需树立一个观点,不是所有事情都要交给Excel去完成,也不是所有事情Excel都是十分胜任的,外面的世界仍然是一个广阔的世界,Excel只是其中一枚耀眼的明星,还有其他更多同样精彩强大的技术、工具等。*Excel催化剂也将借力这些其他技术,让Excel能够发挥更强大的爆发!

关于Excel催化剂作者

姓名:李伟坚,从事数据分析工作多年(BI方向),一名同样在路上的学习者。
服务过行业:零售特别是鞋服类的零售行业,电商(淘宝、天猫、京东、唯品会)

技术路线从一名普通用户,通过Excel软件的学习,从此走向数据世界,非科班IT专业人士。
历经重重难关,终于在数据的道路上达到技术平原期,学习众多的知识不再太吃力,同时也形成了自己的一套数据解决方案(数据采集、数据加工清洗、数据多维建模、数据报表展示等)。

擅长技术领域:Excel等Office家族软件、VBA&VSTO的二次开发、Sqlserver数据库技术、Sqlserver的商业智能BI技术、Powerbi技术、云服务器布署技术等等。

2018年开始职业生涯作了重大调整,从原来的正职工作,转为自由职业者,暂无固定收入,暂对前面道路不太明朗,苦重新回到正职工作,对Excel催化剂的运营和开发必定受到很大的影响(正职工作时间内不可能维护也不可能随便把工作时间内的成果公布于外,工作外的时间也十分有限,因已而立之年,家庭责任重大)。

和广大拥护者一同期盼:Excel催化剂一直能运行下去,我所惠及的群体们能够给予支持(多留言鼓励下、转发下朋友圈推荐、小额打赏下和最重点的可以和所在公司及同行推荐推荐,让我的技术可以在贵司发挥价值,实现双赢(初步设想可以数据顾问的方式或一些小型项目开发的方式合作)。

「数据分析」Sqlserver中的窗口函数的精彩应用之数据差距与数据岛(含答案)...相关推荐

  1. 「数据分析」Sqlserver中的窗口函数的精彩应用-问题篇

    最近看到PowerBI圈子在讨论最大连续区间段的问题,即某人最大的全勤时间,某人的最长的连续打卡时间等问题的计算,佐罗老师给出了10万倍性能的答案.这个问题也引发了笔者一些兴趣,隐约记得以前看过Sql ...

  2. 1万条数据大概占多大空间_「数据分析」Sqlserver的窗口函数的精彩应用之数据差距与数据岛...

    上一篇介绍过数据差距与数据岛的背景,这里不再赘述,请翻阅上一文.此篇在Sqlserver上给大家演示1000万条记录的计算性能. 测试电脑软硬件说明 一般般的笔记本电脑,2017年7月,价格:4500 ...

  3. 「翻译」Unity中的AssetBundle详解(一)

    AssetBundles AssetBundle是一个存档文件,其中包含平台在运行时加载的特定资产(模型,纹理,预制,音频剪辑,甚至整个场景).AssetBundles可以表示彼此之间的依赖关系;例如 ...

  4. mysql缺少函数_Sqlserver的窗口函数的精彩应用之数据差距与数据岛-答案篇

    上一篇介绍过数据差距与数据岛的背景,这里不再赘述,请翻阅上一文.此篇在Sqlserver上给大家演示1000万条记录的计算性能. 测试电脑软硬件说明 一般般的笔记本电脑,2017年7月,价格:4500 ...

  5. 中职高一计算机基础期末试题,中职计算机基础应用高一年级上学期期末考试试卷含答案...

    <中职计算机基础应用高一年级上学期期末考试试卷含答案>由会员分享,可在线阅读,更多相关<中职计算机基础应用高一年级上学期期末考试试卷含答案(5页珍藏版)>请在人人文库网上搜索. ...

  6. 世界上第一台个人微型计算机,中职计算机基础应用高一年级上学期期末考试试卷含答案...

    中职计算机基础应用高一年级上学期期末考试试卷含答案 一.选择题(30题,60分) 1.世界上第一台电子数字计算机取名为( ). A.UNIVAC B.EDSAC C.ENIAC D.EDVAC 2.个 ...

  7. 太强了!一份来自清华的「数据分析」笔记!

    我们正处在一个被数据化包围的时代,大部分公司正迎来需要进行数据分析挖掘的阶段,岗位也要求越来越多的人得掌握一些数据分析的技能. 数据化越来越常见.比如年初疫情刚开始,就有网友在B站制作出了对疫情传播的 ...

  8. 「数据分析」之零基础入门数据挖掘

    Datawhale 作者:王瑞楠,Datawhale优秀学习者 摘要:对于数据挖掘项目,本文将学习应该从哪些角度分析数据?如何对数据进行整体把握,如何处理异常值与缺失值,从哪些维度进行特征及预测值分析 ...

  9. 「三」浏览器中CSS 语法解析过程

    CSS 语法解析过程 1.在浏览器系列文章中,今天终点讲下CSS解析这块内容.我们已知浏览器的渲染流程中HTML Parser会生成 DOM树,而 CSS Parser会将解析结果附加到 DOM 树上 ...

最新文章

  1. RMAN Backups
  2. Java值传递与引用传递
  3. CF703D Mishka and Interesting sum(求区间出现次数偶数次数的异或和)
  4. macOS配置Apache服务器
  5. python编程入门书籍推荐-Python编程启蒙书籍推荐
  6. android摄像头预览功能,android通过camera和surfaceview选择摄像头并即时预览
  7. Delphi程序自删除
  8. 算法竞赛入门经典(第二版) | 例题5-3 安迪的第一个字典 (紫书牛啤!)(UVa10815,Andy's First Dictionary)
  9. margin 等高布局
  10. 2019年第十届蓝桥杯 C / C ++省赛 B 组真题题解
  11. java 自定义运算符_Java中集合的自定义运算符
  12. CUDA学习笔记(三)
  13. bzoj 4443: [Scoi2015]小凸玩矩阵(二分+二分匹配)
  14. java求职英文简历范本2篇_JAVA英文求职简历范文
  15. 2015061410 - 推荐知乎周刊
  16. 目标规划之问题数学化(建模)
  17. 手机总是耗电太快,怎么办?
  18. 仓库防霉防潮作业指导书
  19. 干货 | 五千字长文带你快速入门FlinkSQL
  20. Windows 11 WHQL认证的必要性

热门文章

  1. 接入amazon avs_每日新闻综述:亚马逊将互联网接入推向全球的宏伟计划
  2. vue 入门notes
  3. html中怎么获取搜索框中的值,百度API 搜索框,获取相应的地点的uid
  4. linux 下eclipse调试程序,文章2 Linux安装Eclipse阅读及调试程序
  5. informix linux安装步骤
  6. unity3d Json解析工具类
  7. Wpf控件ListBox使用实例2
  8. 对抗告警疲劳的8种方法
  9. sql server2008中怎样用sql语句创建数据库和数据表
  10. Primes on Interval