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