2015-01-31 3 views
0

내 요구에 맞는 SQL 문을 작성하는 방법을 생각할 수 없습니다.이게 가능하지 않은 경우 알려주십시오. 내가을 선택합니다 의견 조인을 사용하는 SQL 하위 쿼리 문

------------------------------------------------------------ 
id | swo |  date    | Area | 

1 | 15-001 | 2015-01-29 01:52:59  |  2 

1 | 15-002 | 2015-01-30 01:24:00  |  1 

1 | 15-002 | 2015-01-30 01:50:00 |  3 

------------------------------------------------------------ 

:

------------------------------------------------------------ 
id | swo |  date    | issueValue | 

1 | 15-001 | 2015-01-29 01:52:59  |  2 

1 | 15-002 | 2015-01-30 01:24:00 |  2 

------------------------------------------------------------ 

테이블 SERVICIO :

은 내가

테이블 (병이 나에게 dificulties을하지 열을 ommit)과 같은 테이블이 servicio의 행은 각 swo에 할당 된 최신 영역을 포함합니다. 결과는 다음과 같아야합니다.

------------------------------------------------------------ 
id | swo |  date    | Area | 

1 | 15-001 | 2015-01-29 01:52:59  |  2 

1 | 15-002 | 2015-01-30 01:24:00 |  3 

------------------------------------------------------------ 

그래서 어떻게하면 SQL 문이 맨 위 (1)를 확인하고 그 안에 영역 값을 반환 할 수 있습니까?

+0

사용중인 데이터베이스에 귀하의 질문에 태그를하시기 바랍니다 하위 쿼리를 생략하고 절을 자격 사용할 수있는 테라 데이타의 예를 들면 : 마지막으로 당신은 그냥 ROWNUM = 1

SELECT swo ,date ,issueValue ,Area FROM (SELECT SRV.swo ,SRV.date ,SRV.issueValue ,CMNT.Area ,ROW_NUMBER() OVER (PARTITION BY CMNT.swo ORDER BY CMNT.date DESC) AS Dsc_Rank FROM servicio AS SRV LEFT JOIN comments AS CMNT ON (SRV.swo=CMNT.swo) ) AS Temp WHERE Temp.Dsc_Rank = 1 /* Descending Date Rank 1 = Latest date from Comment table*/ 

참고로 WHERE 절을 넣어 선택합니다. –

+0

죄송합니다, 태그를 편집했습니다 –

답변

1

SQL 서버에서는 apply, 하위 쿼리 또는 row_number()을 사용하여이 작업을 수행 할 수 있습니다. 첫 번째 방법은 다음과 같습니다.

select s.*, c.area 
from servicio s outer apply 
    (select top 1 c.* 
     from comments c 
     where c.swo = s.swo 
     order by c.date desc 
    ) c; 

이 방법을 사용하면 원하는 경우 추가 열을 가져올 수 있습니다.

+0

매력처럼 작동했습니다, 감사합니다, –

0

이것은 Rownumber와 하위 쿼리를 사용하는 솔루션입니다. 하위 쿼리에서 테이블간에 일치하는 모든 행을 선택합니다. 댓글 테이블 날짜 열에 대한 오름차순 생성, 모든 SWO에 대한 파티셔닝 (파티셔닝은 모든 다른 SWO에서 카운터를 재설정 함을 의미 함). 1 = 특정 SWO의 최종 날짜. 당신이

관련 문제