0

我有一个 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
4

2 回答 2

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
于 2013-07-20T22:46:33.510 回答
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 语句中的常量字符串具有很强的意义,而不是作为列或表的名称。

于 2013-07-21T00:40:23.173 回答