我需要遍历一个特定列的条目并使用条目进行计算。我的表看起来像这样:
FreeKB (Column to iterate) | FileSystem | Date | System |
---------------------------|------------|-----------|---------|
5000 | TestFS | 2017-03-28| TestSys |
7000 | TestFS | 2017-03-27| TestSys |
3000 | TestFS | 2017-03-26| TestSys |
10000 | TestFS | 2017-03-25| TestSys |
9000 | TestFS | 2017-03-24| TestSys |
8000 | TestFS | 2017-03-23| TestSys |
10000 | TestFS | 2017-03-22| TestSys |
11000 | TestFS | 2017-03-21| TestSys |
问题是:如何遍历" FreeKB"的所有条目。和他们一起计算?更具体一点:我想计算所有条目的中位数,其中FreeKB的数量收缩。我熟悉脚本和一点点c ++,但我是SQL的新手。
很抱歉,如果答案显而易见......
问候
编辑:
对于结果,我想以某种方式迭代表中每个文件系统和系统的最近7天的条目,查看FreeKB的数量缩小的位置,并计算收缩数的中位数。示例:从2017-03-27到2017-03-28,FreeKB的数量在2000年缩小2000 KB,第25到第26,第7000到第22到第23。我想得到数字的中位数并计算文件系统何时可能充满电子邮件
答案 0 :(得分:0)
您可以在SQL Server中使用CrossApply 这里有一些链接可以帮助您入门
http://weblogs.sqlteam.com/jeffs/archive/2007/10/18/sql-server-cross-apply.aspx https://www.mssqltips.com/sqlservertip/1958/sql-server-cross-apply-and-outer-apply/ https://technet.microsoft.com/en-us/library/ms175156(v=sql.105).aspx
以下是示例代码
CREATE TABLE #test (FreeKb int,FileSystem varchar(50),[Date] Datetime)
INSERT INTO #test
SELECT 1001,'TestFS','2016/12/14' UNION
SELECT 1111,'TestFS','2017/01/01' UNION
SELECT 1223,'TestFS','2017/01/15' UNION
SELECT 1233,'TestFS','2017/01/02' UNION
SELECT 1321,'TestFS','2017/01/31' UNION
SELECT 1400,'TestFS','2016/12/12' UNION
SELECT 1456,'TestFS','2017/03/13'
SELECT a.*,b.newColumn FROM #test a
cross apply(
SELECT a.FreeKB/(SELECT count(FreeKB) from #test)as NewColumn
)b