[英]How to add column to an existing table and calculate the value
您正在使用显示计算值的生成虚拟列的语法( ADD columnname AS expression
)。
但是,这仅适用于在同一行中找到的值。 您不能拥有查看其他行的生成列。
如果您现在考虑创建一个普通列并用计算值填充它,这是您不应该做的事情。 不要冗余地存储值。 您始终可以在即席查询中获得差异。 如果您改为冗余存储它,则必须在每次插入、更新和删除时都考虑到这一点。 如果在某个时候您发现差异与时间值不匹配的行,那么哪一列包含正确的值,哪一列包含不正确的值? 闹钟时间还是差异? 你将无法分辨。
您可以做的是为方便起见创建一个视图:
create view v_dial_devicehistoryalarm as
select
dha.*,
datediff(hour, lag(alarmtime) over (order by alarmtime), alarmtime) as dif
from dial_devicehistoryalarm dha;
演示: https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=b7f9b5eef33e72955c7f135952ef55b5
但请记住,您的视图可能会在您每次访问它时读取整个表并对其进行排序。 如果您只查询某个时间范围,那么计算查询中的差异会更快。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.