sql – 按时间块查询记录和分组
我有一个也许天天运行屡次的应用措施.每次运行城市天生写入表的数据,以陈诉产生的变乱.主报表如下所示: Id SourceId SourceType DateCreated 5048 433 FILE 5/17/2011 9:14:12 AM 5049 346 FILE 5/17/2011 9:14:22 AM 5050 444 FILE 5/17/2011 9:14:51 AM 5051 279 FILE 5/17/2011 9:15:02 AM 5052 433 FILE 5/17/2011 12:34:12 AM 5053 346 FILE 5/17/2011 12:34:22 AM 5054 444 FILE 5/17/2011 12:34:51 AM 5055 279 FILE 5/17/2011 12:35:02 AM 我可以说有两次运行,但我想要一种要领来查询日期范畴,即运行历程的次数.我想有一个查询,导致历程开始的时刻和组中的文件数.这个查询有点让我获得我想要的对象,我可以看到什么日期和时刻以及运行了几多文件,但不完满是我想要的.譬喻,它不能容纳从8:58到9:04的运行.譬喻,它还将以9:02和9:15开始的分组运行. Select dateadd(day,datediff(day,DateCreated)) as [Date],datepart(hour,DateCreated) as [Hour],Count(*) [File Count] From MyReportTable Where DateCreated between '5/4/2011' and '5/18/2011' and SourceType = 'File' Group By dateadd(day,DateCreated)),DateCreated) Order By dateadd(day,DateCreated) 我大白,任何接近的跑步都也许会聚积在一路,我很好.我只但愿获得一个大致的分组. 感谢! 办理要领假如您确定这些运行是持续的而且不重叠,那么您应该可以或许行使Id字段来解析您的组.查找仅相隔1的Id字段和相隔大于某个阈值的datedated字段.从您的数据看,运行中的记录最多只能在一分钟内输入,因此安详阈值也许是一分钟或更长.这将为您提供开始时刻 SELECT mrtB.Id,mrtB.DateCreated FROM MyReportTable AS mrtA INNER JOIN MyReportTable AS mrtB ON (mrtA.Id + 1) = mrtB.Id WHERE DateDiff(mi,mrtA.DateCreated,mrtB.DateCreated) >= 1 我称之为DataRunStarts 此刻,您可以行使它来获取有关组开始和竣事位置的信息 SELECT drsA.Id AS StartID,drsA.DateCreated,Min(drsB.Id) AS ExcludedEndId FROM DataRunStarts AS drsA,DataRunStarts AS drsB WHERE (((drsB.Id)>[drsA].[id])) GROUP BY drsA.Id,drsA.DateCreated 我称之为DataRunGroups.我挪用了最后一个字段“Excluded”,由于它所持有的id只是用于界说将被拉出的id组的竣事界线. 此刻我们可以行使DataRunGroups和MyReportTable来获取计数 SELECT DataRunGroups.StartID,Count(MyReportTable.Id) AS CountOfRecords FROM DataRunGroups,MyReportTable WHERE (((MyReportTable.Id)>=[StartId] And (MyReportTable.Id)<[ExcludedEndId])) GROUP BY DataRunGroups.StartID; 我会称之为DataRunCounts 此刻我们可以将DataRunGroups和DataRunCounts放在一路以得到开始时刻和计数. SELECT DataRunGroups.DateCreated,DataRunCounts.CountOfRecords FROM DataRunGroups INNER JOIN DataRunCounts ON DataRunGroups.StartID = DataRunCounts.StartID; 按照您的配置,您也许必要在一个查询中执行全部这些操纵,但您大白了.另外,第一次和最后一次运行都不会包括在其中,由于第一次运行时没有启动ID,而且最后一次运行没有竣事ID.要包括这些内容,您只需对这两个范畴举办查询,并将它们与旧的DataRunGroups查询团结在一路以建设新的DataRunGroups.行使DataRunGroups的其他查询将如上所述事变. (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |