迭代列的条目并与它们一起计算

时间:2017-03-28 09:24:17

标签: mysql sql sql-server

我需要遍历一个特定列的条目并使用条目进行计算。我的表看起来像这样:

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。我想得到数字的中位数并计算文件系统何时可能充满电子邮件

1 个答案:

答案 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