1

我在 MSSQL 2008 中有一个包含 4 列 readdate、tagname、value 和 modifiedvalue 的表。前 3 列由早上 8 点运行的 sql 作业插入,包含从前一天早上 7 点到当天早上 7 点的每小时平均数据. 用户可以通过 Web 应用程序更改修改后的值。

我希望能够查看前几天的数据,如果修改值列中有一个值,那么第二天更新相同的范围。它将始终适用于相同的范围,即如果在前 24 小时内更改了 tagname1 的修改值,那么第二天将需要在该 24 小时期间的修改值列中显示相同的值。

这是我用来选择前几天时间段的代码

SELECT coalesce(amendedValue, value),
       readDate,
       tagName,
       amendedValue,
       value
FROM gasdata
WHERE tagname ='35FI8316'
  AND readDate 
    BETWEEN DateAdd(Hour, 7, DateAdd(DAY, DateDiff(DAY, 0, GETDATE()), -1)) 
    AND dateadd(hour, 6, DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0))
ORDER BY readDate

我只是不知道如何开始,我相信它应该是这样的

如果 modifiedvalue 在此时间段内有值,则在下一个时间段内更新修改后的值。

有点复杂希望它有意义

4

1 回答 1

0

您可以声明一个AmendedValue变量并将其分配给最后几天的数据。

然后你只会更新表,如果AmendedValue等于1 or your custom value

DECLARE @AmendedValue INT

SELECT @AmendedValue = amendedValue
FROM gasdata
Where tagname ='35FI8316' and readDate BETWEEN DATEADD(DAY, -1, GETDATE()) AND GETDATE()

IF @AmendedValue = 1
BEGIN
   -- Update the table
END
于 2013-04-29T12:20:39.177 回答