簡體   English   中英

如何將列添加到現有表並計算值

[英]How to add column to an existing table and calculate the value

表信息:

在此處輸入圖像描述

我想添加新列並使用以下代碼計算 alarmTime 列的不同:

ALTER TABLE [DIALinkDataCenter].[dbo].[DIAL_deviceHistoryAlarm] 
    ADD dif AS (DATEDIFF(HOUR, LAG((alarmTime)) OVER (ORDER BY (alarmTime)), (alarmTime)));

如何在表格中添加計算? 因為總是有這樣的錯誤:

窗口函數只能出現在 SELECT 或 ORDER BY 子句中。

您正在使用顯示計算值的生成虛擬列的語法( 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM