2012-11-30 2 views
2

은 내가 recordID와 정체성은 내가 수행하여 다음과 같은 것을 얻을 수있는 int 형의 경우 createdDAte가 foreignKeyID각 외래 키의 최소 날짜가있는 레코드의 레코드 ID를 얻으려면 어떻게해야합니까?

의 분 (createdDate)이다 foreignKeyID에 대한 recordID와를 얻기 위해 노력하고

recordID    createdDate       ForeignKeyID 
00QA000000PtFXaMAN  2012-01-03 13:23:36.000    001A000000ngM21IAE 
00QA000000OS2QiMAL  2011-12-15 12:03:02.000    001A000000ngM21IAE 
. 
. 
. 
. 

다음 표를 가지고 내가 originaly 쿼리

Select min(recordId),ForeignkeyID 
from table 
group by ForeignKeyId 

내가 다음 쿼리와 임시 테이블을 만든 다음 minDate 및 foreignKeyID에 테이블에 합류 할 수 있다고 생각하지만 나는 foreig에 대한 여러 기록이 있다는 것을 발견 동일한 정확한 createdDate를 갖는 nKeyId.

Select min(createdDate) as minDate,ForeignKeyID 
from table 
group by ForeignKeyId 

저는 임시 테이블이나 하위 쿼리 또는 다른 것을 사용하고 있습니다. 감사. 그것을 할 수있는 방법

+0

때문에 코드의 곤란 다른 사람보다 하나 더 많은 초 같은 : http://stackoverflow.com/questions/tagged/가장 큰 그룹당 + SQL 서버 –

+0

@BillKarwin 그 점을 지적 해 주셔서, 나는 질문을 찾는 방법을 찾는 데 어려움을 겪고있었습니다. 나는 거의 노력하지 않았지만 내가 필요한 것을 생각해 내지 못했다. – atbebtg

답변

3

하나는

select A.ForeignKeyID, R.recordID 
from (select distinct t.ForeignKeyID from table as t) as A 
    outer apply 
    (
     select top 1 t.recordID 
     from table as t where t.ForeignKeyID = A.ForeignKeyID 
     order by t.createdDate asc 
    ) as R 

SQL FIDDLE EXAMPLE

select top 1 with ties 
    t.recordID, t.ForeignKeyID 
from table as t 
order by row_number() over (partition by t.ForeignKeyID order by t.createdDate) 

SQL FIDDLE EXAMPLE

그리고 또 다른 방법

,369이다 할 수있는 또 다른 방법입니다
select A.recordID, A.ForeignKeyID 
from 
(
    select 
     t.recordID, t.ForeignKeyID, 
     row_number() over (partition by t.ForeignKeyID order by t.createdDate) as RowNum 
    from table1 as t 
) as A 
where A.RowNum = 1 

SQL FIDDLE EXAMPLE

내가이 질문은 과거에 여러 번 대답하고있다

+0

와우 @roman 대단히 감사합니다. 첫 번째는 훌륭하게 작동했고 다른 하나는 체크 아웃합니다. 2. – atbebtg

1
SELECT 
    recordID, createdDate, ForeignKeyID 
FROM 
    (SELECT 
     recordID, createdDate, ForeignKeyID, 
     ROW_NUMBER() OVER (PARTITION BY ForeignKeyID 
          ORDER BY createdDate, recordID 
         ) AS rn 
    FROM 
     tableX 
) AS t 
WHERE 
    rn = 1 ; 
관련 문제