[英]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.