SQL 最大连续合格次数 最大连胜记录次数 最大连败记录次数

这篇具有很好参考价值的文章主要介绍了SQL 最大连续合格次数 最大连胜记录次数 最大连败记录次数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

有这样一个问题,工厂中要统计某个供应商送货检验的情况,依照其连续合格次数,决定是否免检,不使用游标或者循环,如何写这个sql。
此情景也可以用于统计连胜记录等

先要学习一下 窗函数LAG,指的是按分组和排序,取到之前(before)行的值。

假如表是这样的:
SQL 最大连续合格次数 最大连胜记录次数 最大连败记录次数,sql,数据库
建表语句如下:

CREATE TABLE InspectionResults (
  ID int NOT NULL AUTO_INCREMENT,
  MaterialCode varchar(50) DEFAULT NULL,
  InspectionTime datetime DEFAULT NULL,
  InspectionOutcome varchar(10) DEFAULT NULL,
  PRIMARY KEY (ID)
)
ENGINE = INNODB,
AUTO_INCREMENT = 1,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_0900_ai_ci;

按照物料,统计最大的连续合格次数,结果是:
SQL 最大连续合格次数 最大连胜记录次数 最大连败记录次数,sql,数据库
以下是sql语句

WITH RankedResults AS (  
    SELECT  
        MaterialCode,  
        InspectionTime,  
        InspectionOutcome,  
        CASE  
            WHEN InspectionOutcome = 'Y' AND   
                 (LAG(InspectionOutcome) OVER (PARTITION BY MaterialCode ORDER BY InspectionTime) IS NULL OR   
                  LAG(InspectionOutcome) OVER (PARTITION BY MaterialCode ORDER BY InspectionTime) <> 'Y')  
            THEN 1 
            ELSE 0  
        END AS StartSequence  
    FROM  
        InspectionResults  
),  
ConsecutiveGroups AS (  
    SELECT  
        MaterialCode,  
        InspectionTime,  
        InspectionOutcome,  
        SUM(StartSequence) OVER (PARTITION BY MaterialCode ORDER BY InspectionTime) AS SequenceGroup  
    FROM  
        RankedResults  
    WHERE  
        InspectionOutcome = 'Y'  
),  
MaxConsecutiveCounts AS (  
    SELECT  
        MaterialCode,  
        SequenceGroup,  
        COUNT(*) AS ConsecutiveCount  
    FROM  
        ConsecutiveGroups  
    GROUP BY  
        MaterialCode,  
        SequenceGroup  
)  
SELECT  
    MaterialCode,  
    MAX(ConsecutiveCount) AS MaxConsecutivePasses  
FROM  
    MaxConsecutiveCounts  
GROUP BY  
    MaterialCode;

关键的中间步骤,请注意观察表中的数据:
SQL 最大连续合格次数 最大连胜记录次数 最大连败记录次数,sql,数据库文章来源地址https://www.toymoban.com/news/detail-804793.html

WITH RankedResults AS (  
    SELECT  
        MaterialCode,  
        InspectionTime,  
        InspectionOutcome,  
        CASE  
            WHEN InspectionOutcome = 'Y' AND   
                 (LAG(InspectionOutcome) OVER (PARTITION BY MaterialCode ORDER BY InspectionTime) IS NULL OR   
                  LAG(InspectionOutcome) OVER (PARTITION BY MaterialCode ORDER BY InspectionTime) <> 'Y')  
            THEN 1   
            ELSE 0  
        END AS StartSequence  
    FROM  
        InspectionResults  
) 
SELECT  
        MaterialCode,  
        InspectionTime,  
        InspectionOutcome, 
        StartSequence, 
        SUM(StartSequence) OVER (PARTITION BY MaterialCode ORDER BY InspectionTime) AS SequenceGroup  
FROM  
        RankedResults  ;  

到了这里,关于SQL 最大连续合格次数 最大连胜记录次数 最大连败记录次数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hive SQL必刷练习题:连续问题 & 间断连续(*****)

    1) 连续问题:找出连续三天(或者连续几天的啥啥啥)。 2) 间断连续:统计各用户连续登录最长天数,间断一天也算连续,比如1、3、4、6也算登陆了6天 这两类问题,都是涉及到连续,只不过连续类问题只要判断出来相邻的时间是和当前行的时间挨着即可,而间断连续,

    2024年03月27日
    浏览(54)
  • 「SQL面试题库」 No_95 每次访问的交易次数

    「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试,代码能力和工作效率也会有明显提升。 1.1 活动流程 整理题目 :西红柿每天无论刮风下雨

    2024年02月08日
    浏览(48)
  • SQL统计连续登陆3天的用户(连续活跃超3天用户)

    1. 数据准备 2. 方法一: 差值计算 user_id active_date rn 10001 2023-02-01 1 10001 2023-02-03 2 10001 2023-02-04 3 10001 2023-02-05 4 10002 2023-02-02 1 10002 2023-02-03 2 10002 2023-02-04 3 10002 2023-02-05 4 10002 2023-02-07 5 … … … user_id active_date rn sub_date 10001 2023-02-01 1 2023-01-31 10001 2023-02-03 2 2023-02-01 10001 2023-02-04 3

    2024年04月25日
    浏览(30)
  • 「SQL面试题库」 No_87 学生们参加各科测试的次数

    「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试,代码能力和工作效率也会有明显提升。 1.1 活动流程 整理题目 :西红柿每天无论刮风下雨

    2024年02月08日
    浏览(57)
  • 【SQL屠夫系列】leetcode-180. 连续出现的数字-(实战扩展:连续登陆N天)

    在如今的程序员面试过程中,考察SQL部分能力,虽不是难点,但几乎是必考. 为检查思路盲点,避免翻船,各位看官也可以复盘下,如对你有一丝的帮助,欢迎给个赞叭~ ps: 数据开发者,建议可以自己加难度进行考察 leetcode难度:中等 面试频率:高 (遇到过类似题型两次+) 表:Logs 需

    2024年02月21日
    浏览(46)
  • SQL-01求连续七天登陆的用户

    2024年01月18日
    浏览(44)
  • 大数据Flink(七十):SQL 动态表 & 连续查询

    文章目录 SQL 动态表 连续查询 一、​​​​​​​SQL 应用于流处理的思路

    2024年02月10日
    浏览(38)
  • 「SQL面试题库」 No_34 连续空余座位

    「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试,代码能力和工作效率也会有明显提升。 1.1 活动流程 整理题目 :西红柿每天无论刮风下雨

    2023年04月22日
    浏览(62)
  • sql高频面试题-连续完成两个指定动作的用户统计

    业务背景 某购物APP最近上线了一个新功能,用户签到后可以跳转到大转盘抽奖,抽奖获得的奖金可以抵消购物的费用,以此来培养用户使用app的习惯。 数据表介绍 现有一张用户行为表action_log,主要字段如下,记录了用户在app上的所有行为日志,即何人userid在何时action_time进

    2024年02月13日
    浏览(44)
  • 【Hive SQL 每日一题】统计用户连续下单的日期区间

    测试数据 需求说明 统计用户连续下单的日期区间,所以连续的下单日期必须 = 2 ,例如: 2023-01-01,2023-01-02 。 分析步骤如下: 按 user_id 、 order_date 进行分组,同天的下单日期只保留一条。 使用 row_number 窗口函数对行号进行标记。 使用 date_sub 函数与行号标记进行运算,如果

    2024年02月09日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包