2012-07-16 6 views
1

SQL에서 뭔가해야하며 현재 혼란 스럽습니다!ID 및 날짜 당 하나의 행만 선택하십시오.

idEvent idService dateCreated 
------- --------- ----------- 
1   1   2012-01-01 
2   1   2012-02-02 
3   2   2012-01-01 
4   2   2012-02-02 

idEvent는 자동 증가 :

그래서 나는 이런 식으로 뭔가가있다.

각 번호는 idService에 대해 가장 큰 행 (dateCreated DESC으로 주문)입니다.

그래서 결과적으로이를 얻을 필요가 것 :

idEvent 
------- 
2 
4 

답변

7

당신은 각 idService/dateCreated 조합에 "행 번호"를 적용 할 공통 테이블 표현식을 사용할 수 있습니다. 테이블 이름을 지정하지 않았으므로이를 수정해야합니다.

;WITH x AS 
(
    SELECT idEvent, idService, dateCreated, rn = ROW_NUMBER() OVER 
    (PARTITION BY idService ORDER BY dateCreated DESC) 
    FROM dbo.table_something_like_this 
) 
SELECT idEvent, idService, dateCreated 
FROM x 
WHERE rn = 1; 
0

Aaron과 매우 유사하지만 주제의 작은 변형입니다. FIDDLE HERE

create table the_table 
(
    idEvent INT, 
    idService INT, 
    dateCreated DATETIME 
) 

insert into the_table 
values 
(1, 1, '01 JAN 2012'), 
(2, 1, '02 FEB 2012'), 
(3, 2, '01 JAN 2012'), 
(4, 2, '02 FEB 2012') 

SELECT * 
FROM 
    the_table a 
    INNER JOIN 
     (
     SELECT 
      idEvent 
      , rk = RANK() OVER (PARTITION BY idService ORDER BY dateCreated DESC) 
     FROM the_table 
     )b 
     ON 
     a.idEvent = b.idEvent 
     AND b.rk= 1 
0

이 whytheq에서 코드의 좀 도둑질, 나는 및 테이블 변수 그룹을 사용하도록 다시 썼다.

DECLARE @the_table TABLE 
     (
     idEvent INT 
     ,idService INT 
     ,dateCreated DATETIME 
     ) 

INSERT INTO @the_table 
VALUES (1,1,'01 JAN 2012'), 
     (2,1,'02 FEB 2012'), 
     (3,2,'01 JAN 2012'), 
     (4,2,'02 FEB 2012') 


SELECT MAX(idEvent) 
FROM @the_table 
GROUP BY idService 
관련 문제