Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 日志分析器2.2查询以计数唯一用户_Sql_Logparser - Fatal编程技术网

Sql 日志分析器2.2查询以计数唯一用户

Sql 日志分析器2.2查询以计数唯一用户,sql,logparser,Sql,Logparser,我一直在尝试在我的自定义日志上构建一个查询,在这里,我根据某些条件对用户进行排序,以便对他们进行一些概述 “我的日志”包含用户每次尝试下载文件时的一个条目,该条目包含日期、ip、自定义生成的令牌以及用户尝试的次数 令牌通过会话存储,一个令牌仅对5次下载尝试有效,这意味着一个ip可以有多个用户(使用不同的令牌),每个用户的尝试次数不同 我想要实现的是相当简单的,我想按ip对用户进行分组,然后计算他们的尝试次数,然后找出有多少用户 金额不是按IP计算的,而是按令牌计算的,这意味着日志条目可能如下所示

我一直在尝试在我的自定义日志上构建一个查询,在这里,我根据某些条件对用户进行排序,以便对他们进行一些概述

“我的日志”包含用户每次尝试下载文件时的一个条目,该条目包含日期、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(一个用户,一次尝试)
我希望我说的有道理,否则我很乐意详细说明/解释所需的一切:)

我相信你需要两个阶段。第一阶段折叠每个用户的条目:

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