2013-07-20 23 views
0

我有一个SQL查询,我期待每小时,每天,每周和每月报告网站使用情况。查询用户登录使用不同的和reprot每日,每周和每月的使用情况

我要求查询使用Distinct,因为应用程序的性质会在每次新登录网站时为表创建多个条目。

这是我到目前为止有:

SELECT DISTINCT OPRID, 
CONVERT(varchar(12), LOGINDTTM, 112) 'Date' 
from PSACCESSLOG_HIST 
where OPRID NOT IN ('AUTOPROC', 'PSAPPS', 'PHSADBA', 'PTWEBSERVER') 
ORDER BY Date 

这将给以下内容:如上白天提到

OPRID  LOGIPADDRESS  LOGINDTTM  LOGOUTDTTM 
dadams  10.1.1.5  20130612  20130612 
jblake  10.1.1.5  20130614  20130614 

首先,我确实需要对数据进行分组。这就是我要找的,对于这部分:

LOGINDATE-TIME TOTAL-LOGINS 
20130612   25 
20130613   35 
20130614   45 

回答

0
SELECT CONVERT(varchar(12), LOGINDTTM, 112) 'Date', count(*) as TOTAL-LOGINS 
from PSACCESSLOG_HIST 
where OPRID NOT IN ('AUTOPROC', 'PSAPPS', 'PHSADBA', 'PTWEBSERVER') 
GROUP BY Date 
ORDER BY Date 
+0

您可以扩展您的建议解决方案为何解决该问题? –

+0

谢谢,这给了我想找的东西。顺便说一句,你知道我需要什么参数转换为显示小时以及 – user1133448

+0

不,我不知道我的头顶。但你可以轻松地谷歌。 –

0

这是我不清楚如何在表中查询结果你生产。您的查询没有提到logoutdttm。在任何情况下,你可以做你想做的按照日期分组和每个日期算起的独特的“OPRID” S(如果我理解正确的话你的要求):

SELECT CONVERT(varchar(12), LOGINDTTM, 112) as "Date", count(distinct OPRID) as NumOPRs 
from PSACCESSLOG_HIST 
where OPRID NOT IN ('AUTOPROC', 'PSAPPS', 'PHSADBA', 'PTWEBSERVER') 
group by CONVERT(varchar(12), LOGINDTTM, 112) 
ORDER BY Date 

(作为一个方面说明,SQL服务器没有按“T让你在group by列使用别名)

取而代之的是convert()的,我喜欢的日期时间转换为date数据类型:

SELECT cast(LOGINDTTM as date) as "Date", count(distinct OPRID) as NumOPRs 
from PSACCESSLOG_HIST 
where OPRID NOT IN ('AUTOPROC', 'PSAPPS', 'PHSADBA', 'PTWEBSERVER') 
group by cast(LOGINDTTM as date) 
ORDER BY "Date" 

此外,尽管SQL Server可以让你放置别名r列在单引号中,你应该使用双引号或方括号。单引号在SQL语句中作为常量字符串具有很强的含义,而不是作为列或表的名称。

相关问题