2013-03-28 4 views
-3

데이터를 채우는 복잡한 쿼리가 있는데 이후에는 올바른 결과를 얻기 위해 테이블의 데이터를 조인해야합니다.테이블을 선언하지 않고 동일한 테이블의 열을 결합하십시오.

테이블을 두 번 정의 할 필요가 없도록 조인을 제거하는 방법. 내가 @tbl 임시 테이블을 decalre해야 위의 쿼리 지금

select t1.acc_no, t1.group_id, t1.remdt from @tbl t1 
inner join ( 
    select group_id, MAX(row_num) as max_row from @tbl group by group_id) t2 
    on t1.group_id= t2.group_id and t1.row_num=t2.max_row 

-

쿼리 존재를 가입 할 수 있습니다.

같은 결과를 얻으려면 조인을 사용하지 않아도되고 동일한 쿼리를 두 번 쓸 필요가 없습니다.

내 @tbl가 SQL 사용하여 채워집니다 -

select ReminderDt as 'rem dt', m.Group_Id, m.AccountNumber, 
row_number() over (partition by group_id order by reminderdt asc) as seqnum 
from ACE_AccsLevelTran t join ACE_AccsLevelMaster m on t.MasterAccNumber=m.AccountNumber where m.AssignedUser=7 

감사를

당신은 윈도우 함수, row_number()하여이 작업을 수행 할 수 있습니다

답변

2

:

select t.acc_no, t.group_id, t.remdt 
from (select t.*, ROW_NUMBER() over (partition by group_id order by row_num desc) as seqnum 
     from @tbl t 
    ) t 
where seqnum = 1; 
+0

은을 임의로 = 1은 적어도 줄 것이다 날짜, 최대 날짜를 원하는 –

+0

@PradyutBhattacharya. . . 'order by '는'desc' 수정자를 가지므로 가장 큰 값은 값 "1"을가집니다. –

관련 문제