0

次のテーブルがあります。

   TableT1                             TableT2

id           name                 mid  id    visitdate       
4            jack                  1   4     2012/01/22          
5            john                  2   5     2012/01/21            
6            mary                  3   6     Null   
                                           4   5     2012/02/21

私はこの2つのテーブルに参加しました..各「ID」について、彼が複数の訪問日を持っている場合、1つのレコードのみを表示する必要があります..

以下のクエリを使用して、必要に応じてレコードを取得しています

 select id,name 
 from TableT1 
 left join
 ( 
   SELECT  id,MAX(visitdate) AS visitdate 
   FROM TableT2 
   GROUP BY id
 )as Last_Visit on TableT1.id=Last_Visit.id 
 order by TableT1.name,Last_Visit.visitdate Desc

私の問題は、各 id(coloumn) の行番号と条件の chk を見つけることですRowNumber >=1 AND RowNumber<=3

4

1 に答える 1

0

これにより、ID ごとの最後の訪問日のみが表示され、この ID に複数の訪問がある場合にのみ表示されます。

WITH cte AS(
    SELECT id
    , visitdate 
    , ROW_NUMBER()OVER(Partition By id Order By visitdate DESC)As VisitNum
   FROM TableT2 
)
select  TableT1.id, TableT1.name
       ,cte.visitdate , cte.VisitNum
 from TableT1 INNER JOIN cte 
    ON TableT1.id=cte.id  AND cte.VisitNum=1 
        AND EXISTS(SELECT NULL FROM cte c2 WHERE c2.id=cte.id AND c2.VisitNum>1)
于 2012-05-07T11:37:41.943 に答える