Eb0e3adfe3b2a3361f01308b6cc08d23
SQL面试题—最近n天连续登录用户

介绍背景

由于SQL作为大数据领域或者说大数据相关岗位必不可少的一门技术,虽然入门起来并不难,但是在真实使用和企业应用中,不管是开发人员,分析人员,还是产品人员都会遇到或多或少的问题

就在我还刚是个刚入门的菜鸟的时候,有一道印象很深的面试题,困扰了我许久,虽然这道题一点不难,甚至在玩会之后,顿时怀疑自己是不是不适合干这一行。

为什么说印象很深呢?

因为我曾多次经历,甚至有着不同的变种,但是归根结底,原理是一样的。

诸如(面试题):

  • 如何用SQL查询连续连续3天登录用户?
  • 如何用SQL查询连续最近七天内连续三天活跃用户数?
  • 如何用SQL查询连续n天登录的用户?

开始解题

  • 1. 首先理解一下题目,以上三个问题无非都围绕这一个主题,那就是"连续",
  • 2. 在数据领域所有的结果都是基于记录统计,因此这里本质含义其实是查询一个人是否连续三天都有数据记录
  • 3. 然后在回到问题的动态变化参数上,不管是3天,7天,还是n天,在SQL领域都可以通过排序,窗口,分析或者统计函数变相的统计出来

而这里,我主要是以窗口函数作为主要的技术实现(不要问为什么,这是最常见,也是相对最有技术含量的方案)

那么问题来了,什么是窗口函数呢?

窗口函数:也叫OLAP函数(Online Anallytical Processing,联机分析处理),可以对数据库数据进行实时分析处理。

这里的OLAP和我在数仓专栏里面介绍的OLAP其实是一个含义,只是这里专指用来实现OLAP功能的一个SQL函数

窗口函数的基本语法如下:
top Created with Sketch.