SQL - 如何对连续数字组进行分组并返回MIN和Max Dates

时间:2015-12-01 19:47:50

标签: sql-server date max min sequential

这让我抓狂!有谁知道如何写一些SQL将返回序列号组的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 

这是它返回的内容:

enter image description here

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

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

enter image description here

非常感谢您提供的任何帮助,谢谢您提前

更新

我现在已经更改了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

结果

enter image description here

非常感谢您对此的帮助,我多年来一直在尝试

问候

杰森

1 个答案:

答案 0 :(得分:1)

这应该这样做:

{{1}}

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