在某个时间段查找某连续出现问题

Posted youmo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在某个时间段查找某连续出现问题相关的知识,希望对你有一定的参考价值。

语法

ROW_NUMBER() OVER(PARTITION BY 列名1 ORDER BY 列名2)

  • ROW_NUMBER()是一个Window函数,它为结果集的分区中的每一行分配一个连续的整数。 行号以每个分区中第一行的行号开头。
  • PARTITION BY子句将结果集划分为分区。 ROW_NUMBER()函数分别应用于每个分区,并重新初始化每个分区的行号。PARTITION BY子句是可选的。如果未指定,ROW_NUMBER()函数会将整个结果集视为单个分区。
  • ORDER BY子句定义结果集的每个分区中的行的逻辑顺序。 ORDER BY子句是必需的,因为ROW_NUMBER()函数对顺序敏感。
-- =============================================    
-- Author:  temp    
-- Create date: 2019-07-25    
-- Description: 查当前员工当月连续请假超过5天的    
-- =============================================    
ALTER    FUNCTION [dbo].[fn_ContinuationLeave]
    (
      @employeeCode VARCHAR(20) ,
      @yearMonth VARCHAR(7)
    )
RETURNS INT
AS
    BEGIN    
     
        DECLARE @whether INT = 0;    
            
        DECLARE @startDate DATE ,
            @endDate DATE;    
        SET @startDate = @yearMonth + '-01';    
            
        SET @endDate = CONVERT(VARCHAR(10), DATEADD(DAY, -1,
                                                    DATEADD(MONTH, 1,
                                                            @startDate)), 120);    
        SELECT  @whether = COUNT(1)
        FROM    ( SELECT    a1.EmployeeCode ,
                            MIN(ClassDate) startDate ,
                            MAX(ClassDate) endDate ,
                            COUNT(*) counts
                  FROM      ( SELECT    * ,
                                        ClassDate
                                        - ROW_NUMBER() OVER ( PARTITION BY EmployeeCode ORDER BY ClassDate ) re
                              FROM      vwgCheckWorkQuery
                              WHERE     SumLN = 1
                                        AND SumLT >= 8
                            ) a1
                  WHERE     a1.ClassDate BETWEEN @startDate AND @endDate
                            AND a1.EmployeeCode = @employeeCode
                  GROUP BY  a1.EmployeeCode ,
                            re
                  HAVING    COUNT(1) >= 6 --将数据分组的对比后再分组,因为相差的间隔是一样,再根据差值一样就说明是无间隔连续的天数
                ) a;    
                   
        RETURN @whether;      
    END;  

以上是关于在某个时间段查找某连续出现问题的主要内容,如果未能解决你的问题,请参考以下文章

记某公司面试算法题:查找一个有序数组某个数字出现的次数

截取字符串时,查找某字符第二次出现的位置,怎么查

查找连续出现最多的数字的算法 - C++

如何快速查找Excel表格中某列中连续5次出现同一数据表格

如何快速查找Excel表格中某列中连续5次出现同一数据表格

查找连续周人员出现在表中