我有一个SQL查询,我希望每小时,每天,每周和每月报告网站使用情况。
我要求查询使用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 :(得分: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
答案 1 :(得分:0)
我不清楚您的查询如何产生您生成的表格。您的查询未提及logoutdttm
。在任何情况下,您都可以通过按日期分组并在每个日期计算不同的“OPRID”(如果我理解您的请求正确)来执行您想要的操作:
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 Server不允许您在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可能允许您将列的别名放在单引号中,但您应该使用双引号或方括号。单引号在SQL语句中具有强烈的意义,而不是列或表的名称。