2010-02-05 115 views
0

我有兩個表,我需要運行一個查詢來顯示用戶在過去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個月內所有記錄的列表;然而,它從當月的第一天開始,到當前的日期結束,但我需要它在今天的日期前3個月開始。

也讓你知道這是MS Access 2007代碼中的SQL視圖。

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; 

(請理解:

在此先感謝

+0

那麼你的問題是什麼? – APC 2010-02-05 09:50:28

+0

抱歉,基本上上面的代碼顯示了過去3個月內的所有記錄列表,但是它從月份的第一天開始到當前日期結束,但我需要它在今天的日期前3個月開始。 – 2010-02-05 09:53:13

+0

我對ms訪問知之甚少,但是通過簡化的方式,您可以將其視爲運行三個單獨的問題(每個'或'還有一個問題),併合並結果。它應該相當快地做一個'DateAdd(「m」,-3,Now())'(或者你可以在ms訪問中得到'今天減去三個月')並且只是做比較來檢查'sessionstart'是大於此。 – 2010-02-05 09:55:37

回答

2

取決於如何「嚴格」定義你的3個月規則,你可以先試着這樣做事情更容易,可能有效,我的MS SQL有點生疏,目前無法測試:想法是讓查詢掃描所有日期介於「TODAY」和「TODAY-90 days」之間的記錄)。

+0

謝謝,它做到了這一點:D – 2010-02-05 10:43:47

+2

我認爲你可以通過改變'now()和'簡單地'''來改善性能,否則訪問會做兩次檢查,即對於兩個邊界。因爲sessionstart永遠不會在將來,所以你只需要檢查'> -90'部分,而不是' 2010-02-05 10:49:36

+0

這是對3個月,即90天前的另一種解釋! – 2010-02-06 01:52:30