2009-11-30 4 views
1

sql noob의 비트, 사용자 정의 코드/전화 번호 표 a에 목록이 있고 표 b에는 모든 통화 레코드가 있습니다.sql join - 두 번째 테이블의 맨 위 행만 선택하십시오.

테이블 a의 각 customercodes/전화 번호에 대해 테이블 ​​b의 최근 호출을 선택하고 싶습니다.

SELECT  A.CustomerCode, A.PhoneNumber, B.StartTime 
FROM   tableA A INNER JOIN 
      tableB B ON (A.PhoneNumber = B.PhoneNumber 
          AND A.CustomerCode = B.CustomerCode) 
ORDER BY A.CustomerCode, A.CLI, B.StartTime DESC 

을하지만 그 TableB의에서 모든 결과를 가져오고있다 :

지금까지 내가 가지고있다. 그 말이 맞다면 나는 문자 그대로 단지 가장 최근의 전화를 받고 싶습니까? 만 표 B에서 STARTTIME를 원하는 경우

답변

4

,이 같은

SELECT  A.CustomerCode, A.PhoneNumber, max(B.StartTime) 
FROM   tableA A INNER JOIN 
      tableB B ON A.PhoneNumber = B.PhoneNumber 
         AND A.CustomerCode = B.CustomerCode 
GROUP BY A.CustomerCode, A.PhoneNumber 
ORDER BY A.CustomerCode, A.CLI 
0

뭔가에 의해 그룹을 사용할 수 있을까?

SELECT A.CustomerCode, A.PhoneNumber, Max(B.StartTime) AS MaxOfStartTime 
FROM A INNER JOIN B ON A.PhoneNumber = B.PhoneNumber 
GROUP BY A.CustomerCode, A.PhoneNumber; 
5

호출 테이블 자체에 가입 할 수 있으며 나중에 행이 존재하지 않도록 지정할 수 있습니다. 마찬가지로 :

SELECT  A.CustomerCode, A.PhoneNumber, B.StartTime 
FROM   tableA A 
INNER JOIN tableB B 
ON   A.PhoneNumber = B.PhoneNumber 
AND   A.CustomerCode = B.CustomerCode 
LEFT JOIN tableB later 
ON   B.PhoneNumber = later.PhoneNumber 
AND   B.CustomerCode = later.CustomerCode 
AND   later.StartTime > B.StartTime 
WHERE  later.PhoneNumber is null 

조건 later.PhoneNumber is null 나중에 행이있을 수 없다고. 동일한 StartTime을 가진 여러 행이 있으면이 행이 모두 선택됩니다.

최근 호출에서 모든 열을 선택할 수 있습니다. B.StartTime 제공

나는이 원하는 결과를 줄 것으로 예상
0
SELECT A.CustomerCode, A.PhoneNumber, B.StartTime 
FROM tableA A INNER JOIN tableB B 
     ON A.PhoneNumber = B.PhoneNumber AND A.CustomerCode = B.CustomerCode 
WHERE B.StartTime = (SELECT MIN(StartTime) FROM B 
         WHERE PhoneNumber = A.PhoneNumber 
         AND CustomerCode = A.CustomerCode) 
ORDER BY A.CustomerCode, A.CLI, B.StartTime DESC 

은, 당신이 너무 가까이하지 않는 날짜 시간 및 이벤트를 처리하는 경우 테이블 A의 각 행에 관련된 세트의 독특한 입니다 이것은 신뢰할 수 있어야합니다.

내가 아는 유일한 다른 방법은 MSSQL 2005에서 CROSS APPLY를 사용하는 것입니다.

관련 문제