2013-05-23 3 views
0

SQL Server를 사용하고 있습니다. 튜토리얼의 주간 정보를 나열하고 싶습니다.sql을 사용하여 최신 연도 레코드를 선택하는 방법

SELECT 
     tx.Lab, t.weekNo 
FROM 
     TutorialX tx 
INNER JOIN 
     Tutorial t 
ON 
     tx.id = t.id 
WHERE 
     t.tutID = @tutID AND 
     t.ProgramID = @pID AND 
     tx.Culture = @culture  
ORDER BY 
     t.WeekNo 

연도 필드는 Tutorial 테이블에 있습니다.

이 쿼리는 모든 기록을 가져옵니다. 매년 14 ~ 16 개의 기록이 있습니다. 매년 14 ~ 16 개의 새로운 기록이있을 것이지만 나는 가장 큰/가장 최근의 기록 만 얻고 싶습니다. 오늘, 나는이 시도했다

2012의 14 ~ 16 개 기록, 다음 년도의 2013 년대를 ... 싶어하지만 결과는이 쿼리를 사용하여 동일합니다 :

SELECT 
     tx.Lab, t.weekNo 
FROM 
     TutorialX tx 
INNER JOIN 
     Tutorial t 
ON 
     tx.id = t.id 
WHERE 
     t.tutID = @tutID AND 
     t.ProgramID = @pID AND 
     tx.Culture = @culture AND 
     t.year IN (SELECT MAX(year) AS y FROM Tutorial GROUP BY year) 
ORDER BY 
     t.WeekNo 

답변

0

나는 내부 쿼리 GROUP BY year 일부를 제거하여 문제를 해결했다.

SELECT 
    t.weekNo, tx.Lab 
FROM 
    TutorialX tx 
INNER JOIN 
    Tutorial t 
ON 
    tx.id = t.id 
WHERE 
    t.tutID = @tid AND 
    t.ProgramID = @pid AND 
    tx.Culture = @culture AND 
    t.year IN (SELECT MAX(year) AS y FROM Tutorial) 
ORDER BY 
    t.weekNo 
1

하는 SQL Server를 사용하는 경우를 2005 +, 당신은 그렇게 할 수있는 ranking functionROW_NUMBER() OVER(PARTITION BY ...)를 사용할 수 있습니다

WITH CTE 
AS 
(
    SELECT tx.Lab, 
     ROW_NUMBER() OVER(PARTITION BY year ORDER BY t.weekno) AS RN 
    FROM TutorialX tx 
    INNER JOIN Tutorial t ON tx.id = t.id 
    WHERE t.tutID = @tutID 
     AND t.ProgramID = @pID 
     AND tx.Culture = @culture  
) 
SELECT Lab 
FROM CTE 
WHERE RN = 1; 
+0

이 또한 나에게 단 한 번의 기록만을 제공합니다. – zkanoca

+1

@ ÖzkanÖZLÜ - 그 테이블의 일부 샘플 레코드와 원하는 출력을 보여 주시겠습니까? 그것은 매우 도움이 될 감사합니다. –

+0

주 번호를 입력하는 것을 잊어 버렸습니다. 알라후 에버! 죄송합니다. 나는 그것을 바로 잡는다! 이제 내 질문이 – zkanoca

관련 문제