2013-03-04 62 views
1

我是SQL新手,在这里面临一个问题。我想我明白我可能需要做的事情,但不了解它的语法。基本上我每小时都有大量的计数,我需要把所有这些小时数统统加入到一起来显示,而不是按小时计算,然后再计算整个天数的平均值。我还需要理清这些日子中的哪些是平日并排除周末......我认为我已经正确地完成了,但是我可能在这方面是错误的。如果有更高效的方式,请告诉我!按日期时间列分组并保持平均值

SELECT DatePart(WEEKDAY, [EVENT_TIME]) as DayoftheWeek 
,[EVENT_TIME] 
,[COUNT] 
,[CLASS_SCHEME_ID] 
,[CLASS_NUM] 
,[ERROR_CODE] 
,[REC_ENTRY_TIME] 
FROM [SAMPLE_DATA].[dbo].[651511] 
WHERE [EVENT_TIME] >= '2009-01-01' AND DatePart(WEEKDAY, [EVENT_TIME]) >=2 AND DatePart(WEEKDAY, [EVENT_TIME]) <= 6 
GROUP BY ,[EVENT_TIME] 
,[COUNT] 
,[CLASS_SCHEME_ID] 
,[CLASS_NUM] 
,[ERROR_CODE] 
,[REC_ENTRY_TIME] 
GO 

我一直在阅读我可能需要做的事情......关于铸造的一些事情可能是?我不确定。

回答

1

不知道你是否想要比天(即类)更低的粒度,但如果不是,我认为这应该让你在那里。如果您希望获得更精确的结果,请将这些字段添加到您的选择和您的分组中。

这也将考虑到@@ DATEFIRST

SELECT 
    DatePart(Weekday, event_time) as DayName, 
    avg(count) as DayAvg 
FROM 
    sample_date.dbo.651511 
WHERE 
    event_time >= '2009-01-01' and 
    (DATEPART(dw, date_created) + @@DATEFIRST) % 7) NOT IN (0, 1) 
Group by 
    DatePart(Weekday, event_time) 
+0

嗨杰森的任何非默认设置,感谢这个!这几乎是正确的,但在第8行我一直在','(我相信它是DATEPART函数中的第一个''')出现语法错误,不知道这是为什么,并且在运行后出现 'SELECT @@ VERSION ' 我有SQL 2005正在运行...有人告诉我这是2008年。不知道有多少差异,使得。 – 2013-03-04 20:56:05

+0

@MatthewPaxman:这个查询确实有问题,但它们与逗号或无关版本的SQL Server(至少,一旦问题得到解决,查询应该在SQL Server 2005中运行,就像在SQL Server 2008中一样好)问题是:1)表名不分隔,2)WHERE中的DATEPART表达式在开始处缺少两个开头的括号,3)在查询结尾处的反引号。查询*中的GROUP BY列表也以逗号开头。这可能是一个错字,就像这个查询中的倒退一样,但它可能会意外地进入了您正在尝试的查询中。 – 2013-03-05 16:47:23