2010-02-05 2 views
0

나는 지난 3 개월 동안 사용자가 가진 조회수를 표시하기 위해 쿼리를 실행해야하는 2 개의 테이블이 있습니다.지난 3 개월 간의 레코드 선택

지금까지 나는 모든 필드 유형이 올바르다 고 생각했습니다. 기본적으로

SELECT dbo_LU_USER.USERNAME 
, Count(*) AS No_of_Sessions 
FROM dbo_SDB_SESSION 
    INNER JOIN dbo_LU_USER 
    ON dbo_SDB_SESSION.FK_USERID = dbo_LU_USER.PK_USERID 
WHERE (((DateDiff("m",[dbo_SDB_SESSION].[SESSIONSTART],Now()))=0 
    Or (DateDiff("m",[dbo_SDB_SESSION].[SESSIONSTART],Now()))=1 
    Or (DateDiff("m",[dbo_SDB_SESSION].[SESSIONSTART],Now()))=2)) 
GROUP BY dbo_LU_USER.USERNAME; 

, 디스플레이 최근 3 개월 이내에 모든 레코드 목록 위의 코드; 그러나, 그것은 달의 1 일부터 시작하여 현재 날짜로 끝나지 만, 오늘 날짜보다 3 개월 전에 시작해야합니다.

또한 MS Access 2007 코드의 SQL View임을 알려드립니다.

SELECT dbo_LU_USER.USERNAME, Count(*) AS No_of_Sessions 
FROM dbo_SDB_SESSION 
INNER JOIN dbo_LU_USER 
ON dbo_SDB_SESSION.FK_USERID = dbo_LU_USER.PK_USERID 
WHERE [dbo_SDB_SESSION].[SESSIONSTART] between now() and DateAdd("d",-90,now()) 
GROUP BY dbo_LU_USER.USERNAME; 

(양해 해 주시기 바랍니다 : "엄격하게"당신이 3 개월 규칙을 정의하는 방법에 따라 미리

+0

귀하의 질문은 무엇입니까? – APC

+0

죄송합니다, 기본적으로 위의 코드는 지난 3 개월 이내에 모든 레코드 목록을 표시합니다. 그러나 해당 월의 첫 번째 날부터 시작하여 현재 날짜까지 끝나지 만 오늘 날짜보다 3 개월 전에 시작해야합니다. –

+0

나는 MS 액세스에 대해 많이 알지 못하지만 간략한 방식으로 세 개의 개별 질문 (각각 '또는'에 대해 하나씩)을 실행하고 결과를 병합하는 것으로 생각할 수 있습니다. 'DateAdd ("m", -3, Now())'를 실행하는 것이 훨씬 더 빠를 것입니다 (그러나 ms 액세스에서 '오늘은 3 개월을 뺀 것입니다.)'를 비교하여'sessionstart'가 그것보다 큽니다. –

답변

2

에서

덕분에, 당신은이 노력에 의해 것들을 많이 쉽고 아마 효율적으로 만들 수 내 MS SQL은 약간 녹슬었고 현재로서는이를 테스트 할 수 없습니다. 즉, "오늘"과 "오늘 - 90 일"사이의 모든 레코드를 쿼리에서 검색하도록하는 것입니다.

+0

고마워, 그랬어 : D –

+2

나는'now()와'단순히'>'로 변경함으로써 성능을 향상시킬 수 있다고 생각한다. 그렇지 않으면 두 경계 모두에 대해 두 번의 검사가 수행되기 때문이다. sessionstart는 앞으로는 결코 존재하지 않을 것이므로' -90' 부분 만 확인하면됩니다. –

+0

그것은 3 개월 전, 즉 90 일 전의 또 다른 해석입니다! –

관련 문제