Sql 日志分析器2.2查询以计数唯一用户
我一直在尝试在我的自定义日志上构建一个查询,在这里,我根据某些条件对用户进行排序,以便对他们进行一些概述 “我的日志”包含用户每次尝试下载文件时的一个条目,该条目包含日期、ip、自定义生成的令牌以及用户尝试的次数 令牌通过会话存储,一个令牌仅对5次下载尝试有效,这意味着一个ip可以有多个用户(使用不同的令牌),每个用户的尝试次数不同 我想要实现的是相当简单的,我想按ip对用户进行分组,然后计算他们的尝试次数,然后找出有多少用户 金额不是按IP计算的,而是按令牌计算的,这意味着日志条目可能如下所示: IP TOKEN ATTEMPT 111.111.111.111 DK1234 a1 111.111.111.111 DK9876 a1 111.111.111.111 DK9876 a2 222.222.222.222 DK5432 a1 如果我能以某种方式为每个IP的每个唯一令牌存储一个要增加的值,并将其与结果一起存储,但我也不知道实现这一点的方法 使用DISTINCT也不会起作用,因为当我这样做时,我会收到一个错误,说DISTINCT不能与GROUP BY一起工作,而当Ip不在GROUP BY中时,我的SUM() (下面的代码片段是我用DISTINCT/count尝试过的) 我希望我的结果网格如何结束:(当然没有解释文本) IP用户尝试 123.456.789.012 4(每个用户尝试一次) 120.987.654.321 2 5(2个用户,一个用户尝试了一次,另一个用户尝试了4次) 444.444.444.444 1 1(一个用户,一次尝试)Sql 日志分析器2.2查询以计数唯一用户,sql,logparser,Sql,Logparser,我一直在尝试在我的自定义日志上构建一个查询,在这里,我根据某些条件对用户进行排序,以便对他们进行一些概述 “我的日志”包含用户每次尝试下载文件时的一个条目,该条目包含日期、ip、自定义生成的令牌以及用户尝试的次数 令牌通过会话存储,一个令牌仅对5次下载尝试有效,这意味着一个ip可以有多个用户(使用不同的令牌),每个用户的尝试次数不同 我想要实现的是相当简单的,我想按ip对用户进行分组,然后计算他们的尝试次数,然后找出有多少用户 金额不是按IP计算的,而是按令牌计算的,这意味着日志条目可能如下所示
我希望我说的有道理,否则我很乐意详细说明/解释所需的一切:)我相信你需要两个阶段。第一阶段折叠每个用户的条目:
SELECT
Ip,
Token,
MAX(TO_INT(replace_chr(Attempt, 'a', ''))) AS Attempts
FROM
...
GROUP BY
Ip,
Token
然后,第二级通过Ip卷取:
SELECT
Ip,
COUNT(*) AS Users,
SUM(Attempts) As TotalAttempts
FROM
...
GROUP BY
Ip
Microsoft
和SQL
不够清晰-您是在使用Microsoft SQL Server(然后请添加SQL Server
标记!)还是在Microsoft Access中使用SQL(然后请添加ms Access
标记)。这是通过日志解析器Lizard加载的自定义日志,但是,这只是Microsoft Log parser 2.2的GUI,因此我不确定它基于什么,()我从您的回答中意识到,我没有适当地解释它,每个用户都有一个尝试计数器,尝试计数器不是每个IP而是每个令牌。是的,上面的第一个阶段将告诉您每个用户的尝试次数,因为它也通过令牌分组。但是您是否也在尝试在不同的IP上聚合同一令牌/用户的结果?否,令牌由国家代码和一组随机数生成,然后存储在会话中,因此通常一个令牌对单个IP只使用一次,虽然Ip可能有不同的令牌/用户-其次,我无法一次执行两个咖喱,但我收到一个错误,上面写着“错误解析查询、语法错误、额外令牌:选择,然后两阶段查询执行您要查找的操作。第一个查询返回每个用户的尝试次数(通过Ip令牌对识别用户),而第二个查询汇总第一个查询的结果,给出每个IP的用户数以及该IP中每个用户的尝试次数之和。不支持开箱即用的两阶段查询,您必须运行第一个查询,将其结果保存到临时CSV文件,并在临时CSV文件上运行第二个查询啊,我会试试的,谢谢你给我解释,有时候我会有点傻。
IP Users Attempts
123.456.789.012 4 4 (4 users each trying one time)
120.987.654.321 2 5 (2 users, One user tried once and the other user tried 4 times)
444.444.444.444 1 1 (One user, one attempt)
SELECT
Ip,
Token,
MAX(TO_INT(replace_chr(Attempt, 'a', ''))) AS Attempts
FROM
...
GROUP BY
Ip,
Token
SELECT
Ip,
COUNT(*) AS Users,
SUM(Attempts) As TotalAttempts
FROM
...
GROUP BY
Ip