需要有关select的帮助以从Access数据库收集数据

时间:2014-11-04 16:34:57

标签: sql ms-access

在PowerShell脚本中我需要从Access数据库中收集数据。这主要是我的终端服务器的日志:每次有人登录或关闭时,脚本都会使用以下信息向我的数据库添加一行(实际上还有更多,但我保持简单:))。

以下是数据库的记录:

table log_table

date_ac              Dept                          User_ac         Typeaccess
1/1/2014             dept1                         user1           logon
1/1/2014             dept3                         user2           logon
1/1/2014             dept3                         user2           logoff
1/1/2014             dept1                         user1           logoff
1/1/2014             dept1                         user1           logon
1/1/2014             dept1                         user1           logoff
2/1/2014             dept1                         user1           logon

我想根据所请求的日期对部门进行分组,并根据一天显示在该时间线内登录的不同人数(因此仅限类型访问登录,而不是注销)(因此,如果用户登录)第一天,如果他记录第二天,它就算一个,但是如果你记录20次第一天仍然只计算一个)。

所以在我的例子中,结果必须是2014年1月1日的请求 - > 2014年2月1日:

  • dept1:2(user1记录了1/1,但它只计算一次,一次计算为2/1,所以总计为2,因为它是基于日期的)
  • dept3:1

我的问题是我无法摆脱"唯一性"用户名,就好像用户每天登录两次或更多,必须将我的总数计为一个。

目前我试过这个:

SELECT log_table.dept, Count(log_table.user_ac) 
AS CountOfuser_ac 
FROM log_table 
WHERE (((log_table.[typeaccess])='LOGON') AND
  ((log_table.[date_ac]) Between #1/1/2014# And #2/1/2014#))
GROUP BY log_table.dept

那项工作但是每次登录都会对用户进行计数。

这里的请求是我想要的输出:

Dept              Total nbr user
dept1             2
dept3             1

1 个答案:

答案 0 :(得分:1)

在按deptdate_acuser_ac分组的子查询中,按部门和日期收集唯一身份用户,然后按部门对该子查询进行分组,以获得所需的数字:< / p>

SELECT t1.[dept], Count(t1.[user_ac]) AS [Unique Logins]
FROM (
  SELECT [date_ac], [dept], [user_ac]
  FROM [log_table]
  WHERE [typeaccess] = 'LOGON' AND
    [date_ac] BETWEEN #1/1/2014# AND #2/1/2014#
  GROUP BY [dept], [date_ac], [user_ac]
) t1
GROUP BY t1.[dept]