SQL - 我如何分组序列号和 return 最小和最大日期

SQL - How can I Group sets of sequential numbers and return the MIN and Max Dates

这让我发疯!有谁知道如何写一些 SQL 来 return 来自序列号组的 MIN 和 MAX 日期?请参阅下面的屏幕截图。

这是我用的SQL:

SELECT
num
, empid
, orderdate

FROM
(SELECT
 ROW_NUMBER() OVER (ORDER BY orderdate) AS Num
 , empid
 , orderdate

 FROM TSQL.Sales.Orders)T1

 WHERE empid = 4 

就是这样 returns:

我想做的是根据 num 列获取每组序列号的最小和最大日期。 例如: 第一组是数字 3、4、5 和 6。所以最小日期是 2006-07-08,最大日期是 2006-07-10

请参阅下面所需的结果示例

如有任何帮助,我们将不胜感激,提前致谢

更新

我现在已经更改了 SQL 来做我需要的:示例如下:

  Select 
  empid
  , Island
  , MIN(orderdate) as 'From'
  , Max(orderdate) as 'To'
      From 
      (select 
        empid
        , num
        , num - ROW_NUMBER() OVER (ORDER BY num, orderdate) as Island
        , orderdate
from 
(Select 
 ROW_NUMBER() OVER (ORDER BY orderdate) as Num
 , empid
 , orderdate

 from TSQL.Sales.Orders)T1
  where empid = 4 
  )T2

  group By 
  empid
  , Island

结果

非常感谢你在这方面的帮助,我已经尝试了很久

此致

贾森

应该这样做:

;with dateSequences(num, empId, orderDate) as
(
    select ROW_NUMBER() over (order by orderdate) as num
        , empId
        , orderdate
    from yourTable
),
dateGroups(groupNum, empId, orderDate, num) as
(
    select currD.num, currD.empid, currD.orderDate, currD.num
    from dateSequences currD
    left join dateSequences prevD on prevD.num = currD.num - 1 and prevD.empid = currD.empId
    where prevD.num is null

    union all

    select dg.groupNum, d.empId, d.orderDate, d.num
    from dateSequences d
    inner join dateGroups dg on dg.num + 1 = d.num and d.empId = dg.empId
)
select empId, min(orderDate) as MinDate, max(orderDate) as MaxDate
from dateGroups
where empId = 4
group by empId, groupNum

基本上它首先创建一个 CTE 以按日期顺序获取每一行的行号。然后它进行递归 CTE,首先找到所有没有先前顺序条目的组,然后将所有后续条目添加到同一组。最后,它获取分配了所有组号的记录,并按组号对它们进行分组,并获取最小和最大日期。