T-SQL触发器以从当前值中减去前一个值以插入到新表中

时间:2018-10-12 17:01:39

标签: sql tsql sql-server-2008 triggers

我有一个T-SQL表SystemReading,其中包含供水系统的仪表读数。在给定站点上获取下一个读数之后,我需要从当前读数中减去前一个读数,以获取两次插入到SystemUsage表中的读数之间的使用情况。第一个表具有ReadingID(身份),SysMeterID(仪表站点),Reading,ReadingDate。第二个表,即我的使用情况表,具有UsageID(身份),SysMeterID(仪表站点),Usage,ReadingDate。我需要确保触发器中仅使用了与当前SysMeterID相同的先前读数。我以前使用CTE查找这种用法,但是现在我需要自动计算它并将其插入到新的用法表中。任何帮助表示赞赏。

这是我以前的CTE供参考:

to_power(4,4)
Out[5]: 256

2 个答案:

答案 0 :(得分:0)

我跳过了CTE并使用了LAG(由SysMeterID划分),并根据需要对您的Current-Previous计算进行了排序。

答案 1 :(得分:0)

希望您可以使用此插入触发器来计算使用量

    CREATE TRIGGER Tgr_AddUsage ON SystemReading  
    AFTER INSERT
    AS 
    BEGIN
        SET NOCOUNT ON;
        DECLARE @SysMeterID  int

        SELECT @SysMeterID = SysMeterID FROM Inserted

        INSERT INTO SystemUsage (SysMeterID, Usage, ReadingDate)
            SELECT t1.SysMeterID, t1.Reading - t2.Reading as Usage, t1.ReadingDate
              FROM Inserted t1 LEFT OUTER JOIN 
                    (SELECT TOP 2 * FROM SystemReading WHERE SysMeterID = @SysMeterID ORDER BY ReadingID DESC) t2 ON t1.ReadingID <> t2.ReadingID 
    END
    GO