• 连续出现的数字


    编写一个 SQL 查询,查找所有至少连续出现三次的数字。

    +----+-----+
    | Id | Num |
    +----+-----+
    | 1 | 1 |
    | 2 | 1 |
    | 3 | 1 |
    | 4 | 2 |
    | 5 | 1 |
    | 6 | 2 |
    | 7 | 2 |
    +----+-----+
    例如,给定上面的 Logs 表, 1 是唯一连续出现至少三次的数字。

    +-----------------+
    | ConsecutiveNums |
    +-----------------+
    | 1 |
    +-----------------+

    # Write your MySQL query statement below
    SELECT DISTINCT
        l1.Num AS ConsecutiveNums
    FROM
        Logs l1,
        Logs l2,
        Logs l3
    WHERE
        l1.Id = l2.Id - 1
        AND l2.Id = l3.Id - 1
        AND l1.Num = l2.Num
        AND l2.Num = l3.Num
    ;
     
     
    窗口函数:lead()

    lead函数在Impala中可以配合over使用,lead函数有三个参数

    lead(property,num,default)

    第一个参数「property」标识想查询的列,「num」标识相对于当前行的第num行,第三个参数是默认值。

    举例:

    执行

    SELECT id,lead(id,1,999) over(order by id) as next_id

    观察结果

    可见实现了我们获取当前 id 下一个id的需求

    所以本题的窗口函数写法:

    # Write your MySQL query statement below
    select distinct num as ConsecutiveNums  from
    (
        select num,lead(num,1)over()as num1,lead(num,2)over()as num2 
        from logs
    ) as c
    where c.num = c.num1 and c.num1 = c.num2
  • 相关阅读:
    centos 部署.NET CORE
    nginx 负载均衡
    graylog centos7 部署
    springboot 2.x centos 7.0 部署
    HashMap源代码阅读理解
    服务器安装redis
    java ---- gradle
    uboot-makefile总览
    makeFile
    Spring 推断构造方法
  • 原文地址:https://www.cnblogs.com/hisoka-study/p/13523234.html
Copyright © 2020-2023  润新知