我有一个更改报告表,其中有两列ChangedTime,FileName
请考虑此表有超过1000条记录
在这里,我需要根据以下因素查询所有更改
i) Interval (i.e-1mins )
ii) No of files
这意味着我们给了Interval 1分钟和No Of文件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条记录。
提前致谢。
答案 0 :(得分: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
会这样做。
答案 1 :(得分:0)
这样的事情应该有效:
您使用COUNT()
函数计算记录数。
然后使用WHERE
子句限制选择:
SELECT COUNT(FileName)
FROM "YourTable"
WHERE ChangedTime >= "StartInteval"
AND ChangedTime <= "EndInterval";
另一种在where子句中有用的方法是BETWEEN
:http://msdn.microsoft.com/en-us/library/ms187922.aspx。
您没有说明您正在使用哪个SQL DB,所以我假设它是MSSQL。
答案 2 :(得分: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