如果员工连续工作,如何俱乐部作为 1 记录



如果员工从 2 月 1 日到 2 月 15 日连续工作,如何俱乐部为 1 条记录。请帮助我

场景 1.连续工作的人。

   empid datebegin  dateend
    1     2017-02-01  2017-02-05
    1     2017-02-06  2017-02-08
    1     2017-02-09  2017-02-15

期望的O/P: 1 2017-02-01 2017-02-15

场景2:不连续工作

枚举日期开始日期结束

    1     2017-02-01  2017-02-05
    1     2017-02-07  2017-02-08
    1     2017-02-09  2017-02-15

期望的O/P:枚举日期开始日期结束

    1     2017-02-01  2017-02-05
    1     2017-02-07  2017-02-15

使用 MAX 和 MIN 聚合函数:

 CREATE TABLE #Table(empid INT, datebegin DATE , dateend DATE)
 INSERT INTO #Table( empid , datebegin , dateend)
 SELECT 1,'2017-02-01','2017-02-05' UNION ALL
 SELECT 1,'2017-02-06','2017-02-08' UNION ALL
 SELECT 1,'2017-02-09','2017-02-15' 
 SELECT empid , MIN(datebegin) datebegin ,MAX(dateend) dateend
 FROM #Table
 GROUP BY empid

使用 Common 表表达式并ROW_NUmber这样可能

DECLARE @sample TABLE (empid INT, datebegin DATE, dateend DATE )
INSERT INTO @sample
 (  empid, datebegin, dateend ) 
VALUES
(1,'2017-02-01','2017-02-05' )
,(1,'2017-02-06','2017-02-08' )
,(1,'2017-02-09','2017-02-15' )
,(2,'2017-02-01','2017-02-05' )
,(2,'2017-02-07','2017-02-08' )
,(2,'2017-02-09','2017-02-15' )
;WITH cteX
AS(
    SELECT
          ROW_NUMBER()OVER (ORDER BY S.empid, S.datebegin) 'RN'
        , S.empid
        , S.datebegin
        , S.dateend
    FROM @sample S
)
SELECT
    S.RN
  , S.empid
  , S.datebegin
  , S.dateend
  , DATEDIFF(DAY,S.dateend, S1.datebegin ) 'Diff'
  , S1.datebegin
  , S1.dateend
FROM cteX S
 JOIN
    cteX S1 ON S1.empid = S.empid AND S1.RN = S.RN + 1
ORDER BY S.RN

产生以下输出

empid   datebegin   dateend
1   2017-02-01  2017-02-15
2   2017-02-01  2017-02-05
2   2017-02-07  2017-02-15

最新更新