2010-04-30 5 views
2

나는 테이블을 가지고있다; 그것이 table1이라고 지명하게하십시오; 다음 필드 및 데이터 다른 공통 필드가있는 행을 검색하는 방법 (필드에서 최대 값 사용)

alt text http://img228.imageshack.us/img228/3827/45939084.png

와 나는 Field2에서 같은 값을 갖는 레코드의 각 그룹에 대한 Field3의 최대 값으로 레코드를 반환하는 쿼리가 필요합니다. 따라서 쿼리가 반환 :

alt text http://img87.imageshack.us/img87/62/48847706.png

이가 SQL 쿼리를 사용하여 어떻게 할 수 있을까?

답변

5

이 다음 field2 기수, 첫 번째 또는 두 번째 쿼리를보다 효율적으로 할 수 있습니다에 따라

SELECT q.* 
FROM (
     SELECT DISTINCT field2 
     FROM table1 
     ) qo 
CROSS APPLY 
     (
     SELECT TOP 1 * 
     FROM table1 t 
     WHERE t.field2 = qo.field2 
     ORDER BY 
       t.field3 DESC 
     ) q 

:

WITH q AS 
     (
     SELECT *, ROW_NUMBER() OVER (PARTITION BY field2 ORDER BY field3 DESC) AS rn 
     FROM table1 
     ) 
SELECT * 
FROM q 
WHERE rn = 1 

또는이.

은 자세한 내용은이 문서를 참조하십시오

+0

감사 Quassnoi을. 첫 번째 것은 추가 "rn"열을 반환합니다. 다음과 같이 편집하십시오. ...... WITH q AS (SELECT *, ROW_NUMBER() OVER (PARTITION BY field2 ORDER BY field3 DESC) AS rn FROM table1) SELECT Field1 , Field2, Field3, Field4 FROM q WHERE rn = 1 ......하지만 두 번째는 훌륭합니다. 기사도 좋습니다. 많은 감사합니다. –

관련 문제