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 日以内であるという条件の下で、それぞれのMindateandを見つける必要があります。MaxdateID

だから私が期待している結果はこのようなものです

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 に答える