2010-02-24 7 views
0

는 다음과 같은 SQL 코드 조각 단축하는 가장 좋은 방법이 될 것입니다 무엇 :단축하고 콤팩트 한이 작은 SQL 조각 (카운트 가장 최근 날짜)

SELECT  a.ViewCount, b.DateCreated 
FROM   (SELECT COUNT(*) AS ViewCount 
       FROM   UserViewHistory uvh1 
       WHERE  (UserID = @UserID) AND (ViewedByUserID = @RequestingUserID)) AS a, 
      (SELECT  TOP (1) DateCreated 
       FROM   UserViewHistory uvh2 
       WHERE  (UserID = @UserID) AND (ViewedByUserID = @RequestingUserID) 
       ORDER BY DateCreated DESC) b 

쿼리의 아이디어를 또한 lastviewed 날짜를 당겨입니다 총 조회수 - 그대로 작동하지만 더 좋은 방법이 있는지 궁금합니다.

미리 감사드립니다.

+1

음, 내가 암시 적 조인 구문을 사용하는 것을 중단하는 것은 매우 좋지 않으므로 실수로 교차 조인이 발생할 수 있습니다. 명시 적 조인 구문은 1992 년부터 표준이었습니다. 좋은 구문을 사용하지 않으려 고합니다. – HLGEM

답변

1

귀하의 SQL 스타일은 내가 익숙한 스타일과 조금 다릅니다. 그러나 이것이 내가 권하고 싶은 것입니다.

Select max(datecreated) as [ViewedLast], COUNT(*) AS ViewCount 
FROM UserViewHistory uvh1 
WHERE (UserID = @UserID) AND (ViewedByUserID = @RequestingUserID) 
+0

답장을 보내 주셔서 감사합니다. 실제로 MS SQL Query Designer에서 해당 쿼리를 시도했습니다. 전형적으로 잘못 입력했거나 눈치 채지 못했을 것입니다. 아주 이상하고 맨 위에! 다시 한번 감사드립니다. – Nathan

0

정확하게 DateCreated가 어떻게 동작하는지 모르겠지만 원하는 결과가 있습니까?

SELECT Count(*), MAX(DateCreated) 
FROM UserViewHistory 
WHERE (UserID = @UserID) AND (ViewedByUserID = @RequestingUserID) 

편집 : BY 절 제거 GROUP, 그것은 neccesary하지 이후; 의견에 감사드립니다!

+0

우, 57 초 만에 나를 때려. :) ​​ – PowerUser

+0

완벽 주의자 입장에서 (단 하나의 행만 있기 때문에) GROUP BY 절이 필요 없다. –

+0

@PowerUser : 그러나 당신의 대답은 더 좋습니다. =) MAX()가 그룹화 할 필요가 없다는 것을 알지 못했습니다 ... – Jens