2009-09-02 61 views
1

我有一個包含報告及其創建日期/時間的表。我想要創建一個圖表來計算在兩個時間段內間隔10分鐘創建的報告數量:8:00 AM-9:00AM和1:00 PM-2:00PM。從訪問中的日期時間字段中選擇時間範圍

這是我想運行一個查詢的例子:

SELECT 
s.StudyStartDateTime AS "8:00 - 8:10", 
s.StudyStartDateTime AS "8:10 - 8:20", 
s.StudyStartDateTime AS "8:20 - 8:30", 
s.StudyStartDateTime AS "8:30 - 8:40", 
s.StudyStartDateTime AS "8:40 - 8:50", 
s.StudyStartDateTime AS "8:50 - 9:00", 
s.StudyStartDateTime AS "1:00 - 1:10", 
s.StudyStartDateTime AS "1:10 - 1:20", 
s.StudyStartDateTime AS "1:20 - 1:30", 
s.StudyStartDateTime AS "1:30 - 1:40", 
s.StudyStartDateTime AS "1:40 - 1:50", 
s.StudyStartDateTime AS "1:50 - 2:00" 
FROM 
    dbo_Study_ViewX211_Rpt AS s 
WHERE FORMAT("8:00 - 8:10", 'hh:mm:ss') BETWEEN "08:00:00" AND "08:09:59" 
AND FORMAT("8:10 - 8:20", 'hh:mm:ss') BETWEEN "08:10:00" AND "08:19:59" 
AND FORMAT("8:20 - 8:30", 'hh:mm:ss') BETWEEN "08:20:00" AND "08:29:59" 
AND FORMAT("8:30 - 8:40", 'hh:mm:ss') BETWEEN "08:30:00" AND "08:39:59" 
AND FORMAT("8:40 - 8:50", 'hh:mm:ss') BETWEEN "08:40:00" AND "08:49:59" 
AND FORMAT("8:50 - 9:00", 'hh:mm:ss') BETWEEN "08:50:00" AND "08:59:59" 
AND FORMAT("1:00 - 1:10", 'hh:mm:ss') BETWEEN "01:00:00" AND "01:09:59" 
AND FORMAT("1:10 - 1:20", 'hh:mm:ss') BETWEEN "01:10:00" AND "01:19:59" 
AND FORMAT("1:20 - 1:30", 'hh:mm:ss') BETWEEN "01:20:00" AND "01:29:59" 
AND FORMAT("1:30 - 1:40", 'hh:mm:ss') BETWEEN "01:30:00" AND "01:39:59" 
AND FORMAT("1:40 - 1:50", 'hh:mm:ss') BETWEEN "01:40:00" AND "01:49:59" 
AND FORMAT("1:50 - 2:00", 'hh:mm:ss') BETWEEN "01:50:00" AND "01:59:59" 

遺憾的是,似乎訪問不能告訴現場,我想格式中的格式化功能是指到查詢中相同名稱的字段。在上面的例子中,我認爲這是因爲Access將它視爲字符串文字。但是,這不起作用,或者:

SELECT 
    s.StudyStartDateTime AS first 
FROM 
    dbo_Study_ViewX211_Rpt AS s 
WHERE FORMAT(first, 'hh:mm:ss') BETWEEN "08:00:00" AND "08:09:59" 

訪問提示我輸入'first'的值。

我覺得我會以這種錯誤的方式開始。任何人都可以將我指向正確的方向嗎?我通過ODBC使用Jet引擎,但實際上數據存儲在SQL Server 2005中,所以如果有必要,我想我可以編寫一個傳遞查詢。不過,理想情況下,我希望它能在Access中工作。

編輯:

需要明確的是,在下列情況工作:

SELECT s.StudyStartDateTime AS first 
FROM dbo_Study_ViewX211_Rpt AS s 
WHERE FORMAT(StudyStartDateTime,'hh:mm:ss') Between "08:00:00" And "08:09:59"; 

然而,這並不讓我多次選擇多個條件下,相同的字段。

http://office.microsoft.com/en-us/access/HA012288391033.aspx#examples第一個例子表明,包裹在方括號字段的別名是引用一個記錄源的正確方法,但下面仍導致提示輸入的值「第一」:

SELECT s.StudyStartDateTime AS first 
FROM dbo_Study_ViewX211_Rpt AS s 
WHERE FORMAT([first],'hh:mm:ss') Between "08:00:00" And "08:09:59"; 

編輯II:

的StudyStartDateTime的幾個記錄的內容的一個例子:

29/11/2007 8:06:00 AM 
30/11/2007 8:09:01 AM 
05/12/2007 8:06:51 AM 
06/12/2007 8:07:21 AM 

訪問認爲這網絡作爲「日期/時間」數據類型。

我的最終目標是繪製每個區間的計數。我認爲這樣做的最簡單方法是簡單地選擇每個日期/時間作爲不同的別名。例如:

8:00-8:10 8:10-8:20 8:20:8:30 ... 
======================================= 
8:01   
8:03 
      8:15 
         8:23 
         8:28 
         8:28 
... 
+0

你看過PARTITION()嗎? – 2009-09-03 01:44:49

回答

3

您遇到的問題是因爲訪問未在同一查詢中通過其別名引用字段。這意味着您不能在select子句中分配別名,並在where子句中使用它。

至於你的問題的第一部分,你可以嘗試這樣的事情

SELECT 
     sum(iif(FORMAT(s.StudyStartDateTime,'hh:mm:ss') 
       BETWEEN "08:00:00" AND "08:09:59",1,0)) as "8:00 - 8:10", 
     sum(iif(FORMAT(s.StudyStartDateTime,'hh:mm:ss') 
       BETWEEN "08:10:00" AND "08:19:59",1,0)) as "8:10 - 8:20", 
     ... 
    FROM dbo_Study_ViewX211_Rpt AS s 

這會給你每10分鐘的時間內理貨。

+0

完美。我知道我正在做這個錯誤的方式。謝謝! – Richard 2009-09-02 16:45:38

相關問題