1

我有一张这样的桌子

ID   firSrvdate   LastSrvdate
----------------------
1    1-12-81  1-15-81
1    1-18-81  1-18-81
1    2-9-81   3-1-81
2    4-2-81   4-5-81
2    8-18-81  8-18-81
2    11-9-81   11-21-81
3    3-12-81  4-15-81
3    7-17-81  8-19-81

我需要在服务之间的差异应该小于 90 天的条件下找到MindateMaxdateID

所以我期待的结果是这样的

ID  Mindate  MaxDate
-----------
1   1-12-81  3-1-81
2   8-18-81  11-21-81
3   7-17-81  8-19-81
4

2 回答 2

2

由于我们不确定哪一对日期适合 90 天窗口,因此我们首先需要对其自身进行连接。一旦我们有了它,我们就必须选择我们想要的那个。使用 row_Number 我们可以按最大差异排序。我还使用 maxdate 作为决胜局。这是中间结果的样子

SELECT id, 
       mindate, 
       maxdate 
FROM   (SELECT t1.id, 
               t1.mindate, 
               t2.maxdate, 
               Row_number() OVER (partition BY t1.ID 
                                  ORDER BY Datediff(day, t1.mindate, 
                                          t2.maxdate) DESC, t2.maxdate DESC) rn 
        FROM   table1 t1 
               INNER JOIN table1 t2 
                 ON t1.id = t2.id 
        WHERE  Datediff(day, t1.mindate, t2.maxdate) < 90) AS t 
WHERE  rn = 1 

演示

于 2012-05-20T04:33:35.797 回答
1

您可以使用 having 子句来完成此操作:

select id, min(date) as mindate, max(date) as maxdate
from table
group by id
having datediff(day, min(date), max(date) < 90
于 2012-05-20T04:15:23.787 回答