.net 简单的数据-我只需要简单的方法来分析 总结

.net 简单的数据-我只需要简单的方法来分析 总结,.net,asp.net,database,reporting,analysis,.net,Asp.net,Database,Reporting,Analysis,我想了解一些关于使用SQL server和.net分析简单数据的最简单方法的建议 细节 非常简单的数据-只需要非常简单的方法来分析我的简单的大脑 我有一个SQL Server表: PKID-Int 应用程序名VarChar MethodName VarChar TimeInMs整数 附加信息VarChar 日期时间日期时间 此表记录了各种方法在各种应用程序中运行所需的时间长度。此表可能有数万行。我想很容易地提取有用的信息从这其中的一些实时。我不知道最好的办法是什么。我想要的这类数据是: 资料 -

我想了解一些关于使用SQL server和.net分析简单数据的最简单方法的建议

细节 非常简单的数据-只需要非常简单的方法来分析我的简单的大脑

我有一个SQL Server表:

PKID-Int 应用程序名VarChar MethodName VarChar TimeInMs整数 附加信息VarChar 日期时间日期时间 此表记录了各种方法在各种应用程序中运行所需的时间长度。此表可能有数万行。我想很容易地提取有用的信息从这其中的一些实时。我不知道最好的办法是什么。我想要的这类数据是:

资料 -方法调用的平均时间长度 -十大最慢的方法调用 -十大最快的方法调用

在以下期间: -最后一分钟、小时、日、周、月 -过去7天内每天,过去10周内每周

有关申请: -全部
-如果不添加时间戳信息,您将无法进行有意义的分析。您最多可以创建查询来汇总应用程序性能的统计信息

select count(*) from table_name where ApplicationName = "BAR.EXE";

select sum(TimeInMs) from table_name group by ApplicationName;
除了编写代码来划分这些数字之外,您不能做很多事情


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

我认为ojblass指的是您在问题中忽略的DataTime字段

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

我建议你改进一下你的列名。调用列DateTime会造成混乱,如果不小心,可能会在编写查询时造成一些麻烦

无论如何。。。如果直接用TSQL编写,您要查找的查询范围从简单到非常复杂

以下是一些我没有检查语法的示例,因此它们充其量只是近似值:

特定方法的平均时间

select avg(TimeInMs) as AvgTime from Table 
where ApplicaitonName = @ApplicationName
过去1分钟内特定方法的平均时间

select avg(TimeInMs) as AvgTime from Table 
where ApplicaitonName = @ApplicationName and 
    [DateTime] >= DATEADD(minute, -1, getdate())
您最终会希望为其中大多数编写存储过程。您提到的一些查询将需要一些分组,例如。。。如果你走这条路,我建议你买一本关于TSQL的书

如果您在应用程序中使用LINQtoSQL来实现这一点,则不会有太大的不同,但一般来说,LINQ更容易编写,这当然是有争议的

这里是同样的两个在C中使用LINQtoSQL的查询,我还没有测试过它们,所以我可能会犯一些小的语法错误

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();

有一个DateTime列,我的示例中遗漏了它。如果这被证明是有用的,那么添加一个timestamp列也很容易。为了清楚起见,我在上面的帖子中添加了它们。你有没有一种简单的方法可以对数据库运行sql?但是我想得到一个方法的平均时间,以分钟为单位:1,2,3,4,5,6,7,8,9,10,20,30,40,50,60120240360有没有办法在另一个表中定义小步舞曲列表,然后进行某种连接以获得所有这些的结果?我现在可以看到如何获取简单的单个信息,感谢您的输入和链接示例。我真的在寻找一种最好的方法,一次获取多个数据片段,如分钟示例。我对如此简单的数据集感到惊讶,它是如此的难!我修改了我的答案,加入了一个你所问问题的例子。这里的问题是,您想要的查询对于人类来说只是简单的,但从SQL的角度来看,实际上是相当复杂的问题。在TSQL中,有很多方法可以编写非常复杂的选择,就像您要更优雅地询问的那样,但是这样的回答远远超出了在一篇简单的SO文章中可以合理回答的范围。如果你将来要做很多这类的事情,我建议你对高级TSQL进行一些认真的培训或阅读。
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