2013-08-08 4 views
0

max (DateOccurred)가 발견 된 행에서 사용자 ID 값을 얻으려고합니다. 나는 모든 하위 쿼리에서 길을 잃고있다. SELECT 문에서 다른 큰 쿼리의 일부 이후 단일 값을 반환해야합니다sql - 최대 값 중첩 쿼리의 다른 값 선택

나는 SQL 서버를 2008

참고를 사용하고 있습니다.

최대 날짜 (작동)의 예; 하지만 지금은이 하위 쿼리 최대 날짜와 관련된 사용자 ID가 필요합니다.

(

    SELECT MAX(LC.[Date]) 

    FROM table_LC LC LEFT JOIN table_LM LM ON LC.[c] = LM.[c] AND LC.[L] = LM.[L] 

    WHERE LM.[c] = LC.[c] AND LM.[L] = LC.[L] AND LC.[LC] = 'ABCDEF' 

    ) as [ABCDEF_Date], 

답변

0

나는 전체 쿼리를 볼 수 있지만, 당신은 아마 대신 윈도우 기능을 사용하려면 :

max(case when lc.lc = 'ABCDEF' then lc.[DATE] end) over() as maxdate 

이 정확하게 맞지 않을 수 있습니다. 나머지 쿼리를 보지 않고 말하기는 어렵습니다.

사용자 ID를 가져 오는 것은 비슷한 논리를 사용합니다.

편집 :

또한 (가 상관되지 않음) from 절에이를 바꾸어 같은 효과를 얻을 수 있습니다

:

from . . . cross join 
    (select top 1 lc.[Date], lc.id 
     FROM table_LC LC LEFT JOIN 
      table_LM LM 
      ON LC.[c] = LM.[c] AND LC.[L] = LM.[L] 
     WHERE LM.[c] = LC.[c] AND LM.[L] = LC.[L] AND LC.[LC] = 'ABCDEF' 
     order by lc.[date] desc 
    ) as ABCDEF_Date 
0

이 서브 쿼리 -


(SELECT Userid, 
     Date 
FROM (SELECT Userid, Date FROM table_LC) b 
WHERE date = (SELECT MAX(LC.[Date]) 
FROM table_LC LC LEFT JOIN table_LM LM ON LC.[c] = LM.[c] AND LC.[L] = LM.[L] 
WHERE LM.[c] = LC.[c] AND LM.[L] = LC.[L] AND LC.[LC] = 'ABCDEF')) 
0

을 GROUP BY 절을 사용하면 집계되지 않은 추가 열을 SELECT 할 수 있습니다.

"사용자 ID"필드가 LC 테이블에 있다고 가정했지만 LM 테이블에도 쉽게 입력 할 수 있습니다.

SELECT 
    LC.[UserID] 
    , MAX(LC.[Date]) 

FROM 
    table_LC LC 
    LEFT JOIN table_LM LM ON 
     LC.[c] = LM.[c] AND LC.[L] = LM.[L] 

WHERE LM.[c] = LC.[c] AND LM.[L] = LC.[L] AND LC.[LC] = 'ABCDEF' 

GROUP BY LC.[UserID] 

@Gordon은 SELECT TOP 1과 ORDER BY를 결합한 다른 좋은 방법을 언급했습니다.

SELECT TOP 1 
    LC.[UserID] 
    , LC.[Date] 

FROM 
    table_LC LC 
    LEFT JOIN table_LM LM ON 
     LC.[c] = LM.[c] AND LC.[L] = LM.[L] 

WHERE LC.[LC] = 'ABCDEF' 

ORDER BY LC.[Date] DESC