2009-09-02 63 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

相关问题