在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日:
我的问题是我无法摆脱"唯一性"用户名,就好像用户每天登录两次或更多,必须将我的总数计为一个。
目前我试过这个:
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
答案 0 :(得分:1)
在按dept
,date_ac
和user_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]