【问题标题】:How to calculate the average value and update it in place of zeros? using SSIS如何计算平均值并更新它来代替零?使用 SSIS
【发布时间】:2016-11-02 06:33:59
【问题描述】:

提前谢谢你。 我有一个Mytable1

Site_name | date& Time                |PowerOutput         

xyz001    |2013-07-21 01:00:00.000    |192
xzu001    |2013-07-21 02:00:00.000    |189    
abf003    |2013-07-21 03:00:00.000    |0
ACT0001   |2013-07-21 04:00:00.000    |178

如果为零,我想计算上一行和下一行的平均值。

我的输出表应该是:

Sitename  |date&time                  |Power_output   

xyz001    |2013-07-21 01:00:00.000    |192
xzu001    |2013-07-21 02:00:00.000    |189 
abf003    |2013-07-21 03:00:00.000    |189
ACT0001   |2013-07-21 04:00:00.000    |178

逻辑是:

((上一个值-下一个值)/上一个值) *100

((上一个值-下一个值)/上一个值)*100 >=5, 如果这是真的,那么它应该保持为零。

【问题讨论】:

  • SELECT [DATE&Time],site_name,lead([DATE&Time],1,1) OVER (ORDER BY site_name) As Max, lag([DATE&Time],1,1) OVER (ORDER BY site_name) As Min FROM [dbo].[Mytable] where [pr_output] =0 我使用 *lag 和 lead * 来确定值为零的每小时间隔。
  • 我将获得以百万为单位的值,我无法每次都更新这些值。他们是通过 SSIS 做到这一点的另一种方式吗

标签: sql sql-server ssis


【解决方案1】:

试试这个

BEGIN TRAN

DECLARE @Id INT ,@PreValue INT,@NextValue INT
CREATE TABLE #table(_Id INT IDENTITY(1,1) , Site_name VARCHAR(100),_dateTime DATETIME,PowerOutput INT,_upFlg TINYINT DEFAULT(0))        

INSERT INTO #table( Site_name ,_dateTime ,PowerOutput)
SELECT 'xyz001'    ,'2013-07-21 01:00:00.000'   ,192 UNION ALL
SELECT 'xzu001'    ,'2013-07-21 02:00:00.000'    ,189    UNION ALL 
SELECT 'abf003'    ,'2013-07-21 03:00:00.000'    ,0UNION ALL
SELECT 'ACT0001'    ,'2013-07-21 04:00:00.000'    ,178


WHILE EXISTS(SELECT 1 FROM #table WHERE PowerOutput = 0 AND _upFlg = 0)
BEGIN

     SELECT Top 1 @Id = _Id FROM #table WHERE PowerOutput = 0 AND _upFlg = 0

     SELECT @PreValue = PowerOutput FROM #table WHERE _Id = @Id - 1
     SELECT @NextValue = PowerOutput FROM #table WHERE _Id = @Id + 1

     IF  ( (@PreValue-@NextValue)/@PreValue ) < 5
       UPDATE #table SET PowerOutput = @PreValue WHERE _id = @id

     UPDATE #table SET _upFlg = 1 WHERE _Id = @Id

END


SELECT * FROM #table




ROLLBACK TRAN

【讨论】:

  • @mansoor:谢谢你的帮助。我将获得数百万的值,我不能每次都更新这些值。他们是通过 SSIS 做到这一点的另一种方式吗
猜你喜欢
  • 2015-05-28
  • 1970-01-01
  • 2017-05-26
  • 2022-11-27
  • 1970-01-01
  • 2014-11-13
  • 1970-01-01
  • 1970-01-01
  • 2013-07-25
相关资源
最近更新 更多