首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >简单的数据-我只需要简单的方法来分析

简单的数据-我只需要简单的方法来分析
EN

Stack Overflow用户
提问于 2009-04-25 20:15:22
回答 2查看 238关注 0票数 0

摘要

对于使用SQL server和.net分析简单数据的最简单方法,我提出了一些建议。

详细信息

非常简单的数据-只是需要非常简单的方法来分析(用我简单的大脑)

我有一个Server表:

(Int)

  • ApplicationName (VarChar)

  • MethodName (VarChar)

  • TimeInMs (Integer)

  • AdditionalInfo (VarChar)

  • DateTime (DateTime)

这个表记录了在各种应用程序中运行各种方法所需的时间。此表可能有数万行。我想很容易地从中提取有用的信息(其中一些是实时的)。我不知道做这件事的最好办法。我想要的这类数据是:

数据.方法调用的平均时间-十大最慢的方法调用-十大最快的方法调用

指的是:最后一分钟、最后一小时、最后一天、最后一周、最后十周的每一天。

申请:-所有-每个单独

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-04-25 21:28:09

我认为ojblass指的是您在问题中遗漏的DataTime字段。

misleading中的实际时间戳数据类型在名称上具有误导性。这与日期和时间无关。它是一个二进制的“版本号”。它主要用于在更新表中的行时处理并发问题,但对于任何分析任务都是无用的。

我建议你改进一下你的列名。调用列"DateTime“是令人困惑的,如果您不小心的话,可能会给您编写查询带来一些麻烦。

不管怎样..。如果直接用TSQL编写,您要查找的查询范围从简单到相当复杂。

下面是一些示例(我还没有检查这些语法,因此它们最多是“近似的”):

特定方法的平均时间

代码语言:javascript
运行
复制
select avg(TimeInMs) as AvgTime from Table 
where ApplicaitonName = @ApplicationName

特定方法在最后1分钟内的平均时间

代码语言:javascript
运行
复制
select avg(TimeInMs) as AvgTime from Table 
where ApplicaitonName = @ApplicationName and 
    [DateTime] >= DATEADD(minute, -1, getdate())

您最终会想要为其中的大多数编写存储过程。你提到的一些查询需要分组等等.如果你走这条路,我建议你买一本关于TSQL的书。

如果您在应用程序中使用LINQ执行此操作,则不会有太大的不同,但通常LINQ更容易编写(当然,这是有争议的)。

下面是两个在C#中使用LINQ的查询(同样,我还没有测试这些查询,所以我可能会犯一些小语法错误)。

代码语言:javascript
运行
复制
var ctx = new MyDataContext();
var q = (from item in ctx.Table
        where item.ApplicationName == "MyApplication"
        select item.TimeInMs).Average();


var ctx = new MyDataContext();
var q = (from item in ctx.Table
        where item.ApplicationName == "MyApplication" &&
              item.DateTime <= DateTime.Now.AddMinutes(-1)
        select new item.TimeInMs).Average();

如何进行分析取决于您所使用的技术以及您对结果所做的操作。

更新:回答评论中的后续问题:

我想不出通过在另一个表中存储所需的时间间隔(游标和通过Execture命令动态构造的TSQL )来处理它的好方法。

在TSQL中,获得所需结果的更简单的查询看起来可能是这样(我并不主张这是“最佳”方式,但它工作得很快,而且速度相当快)。

代码语言:javascript
运行
复制
select avg(TimeInMs) as AvgTime, 'Last 1 minute' as TimePeriod from Table 
where ApplicaitonName = @ApplicationName and 
    [DateTime] >= DATEADD(minute, -1, getdate())
union
select avg(TimeInMs) as AvgTime, 'Last 2 minutes' as TimePeriod from Table 
where ApplicaitonName = @ApplicationName and 
    [DateTime] >= DATEADD(minute, -2, getdate())
-- //repeat union as many times as needed for each time period
票数 0
EN

Stack Overflow用户

发布于 2009-04-25 20:17:53

如果不添加时间戳信息,就无法进行有意义的分析。最多可以创建查询,以汇总应用程序性能的统计信息。

代码语言:javascript
运行
复制
select count(*) from table_name where ApplicationName = "BAR.EXE";

select sum(TimeInMs) from table_name group by ApplicationName;

除了编写代码来除以这些数字之外,您不能做很多事情。

Update:使用时间戳信息,您可以调整上述示例的where子句以选择您感兴趣的范围。考虑到您问题的不精确性,我可能建议将数据导入Excel (我没有安装Excel ),并以各种方式对数据进行按摩,而不是直接处理SQL。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/789648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档