0

我有一个更改报告表,其中包含两列 ChangedTime,FileName在此处输入图像描述

请考虑此表有超过 1000 条记录

这里我需要根据以下因素查询所有的变化

i) Interval (i.e-1mins )
ii) No of files

这意味着当我们给定Interval 1 min和No Of files 10时。如果在任何1分钟间隔内更改的文件数超过10,我们需要获取所有更改的文件都存在于该1分钟间隔内

例子:

  i) Consider we have 15 changes in the interval 11:52 to 11:53
  ii)And consider we have 20 changes in the interval 12:58 to 12:59

现在我的预期结果将是 35 条记录。

提前致谢。

4

3 回答 3

1

您需要按间隔聚合,然后进行计数。假设从时间 0 开始的间隔是可以的,以下应该有效:

declare @interval int = 1;
declare @limit int = 10;

select sum(cnt)
from (select count(*) as cnt
      from t
      group by DATEDIFF(minute, 0, ChangedTime)/@interval
     ) t
where cnt >= @limit;

如果您有其他时间来确定间隔应该何时开始,则将其替换为0.

编辑:

对于您的特定查询:

select sum(ChangedTime)
from (select count(*) as ChangedTime
  from [MyDB].[dbo].[Log_Table.in_PC] 
  group by DATEDIFF(minute, 0, ChangedTime)/@interval
 ) t
where ChangedTime >= @limit;

您不能在子查询中使用由三部分组成的别名。 t会做。

于 2013-07-02T13:56:12.627 回答
0

这样的事情应该可以工作:您使用该COUNT()函数计算记录数。然后使用WHERE子句限制选择:

SELECT COUNT(FileName) 
FROM "YourTable" 
WHERE ChangedTime >= "StartInteval" 
  AND ChangedTime <= "EndInterval";

在 where 子句中有用的另一种方法是:http BETWEEN: //msdn.microsoft.com/en-us/library/ms187922.aspx

您没有说明您使用的是哪个 SQL DB,所以我假设它是 MSSQL。

于 2013-07-02T13:52:32.233 回答
0
select count(*) from (select a.FileName, 
b.ChangedTime startTime, 
a.ChangedTime endTime, 
DATEDIFF ( minute , a.ChangedTime , b.ChangedTime ) timeInterval
from yourtable a, yourtable b
where a.FileName = b.FileName
and a.ChangedTime > b.ChangedTime
and DATEDIFF ( minute , a.ChangedTime , b.ChangedTime ) = 1) temp
group by temp.FileName
于 2013-07-02T14:08:55.430 回答