对绿色SQL问题表示歉意。我应用这个查询来确定PersonID何时发生更改,即如果查询返回的PersonID与当前PersonID不匹配,则它是一个新的人员实例。我希望这个查询能改变表,将值放在一个新列中,而不仅仅是在查询中返回。
SELECT *,
lag(PersonID, 1) OVER(ORDER BY PersonID ASC) AS test
FROM Data_Temp
PersonID是现有列,test是具有PersonID 中lag
值的新列
PersonID | 测试 |
---|---|
1 | |
2 | 1 |
3 |
一种方法是在SELECT
上使用CREATE VIEW
语句,这将允许您替换旧表,并避免使用ALTER TABLE
和UPDATE
语句。
CREATE OR REPLACE VIEW Data_Temp_With_Lags AS
SELECT *,
lag(PersonID, 1) OVER(ORDER BY PersonID ASC) AS test
FROM Data_Temp
由于这是一个VIEW
,所以只有在您需要时才会计算数据。如果您希望存储数据,则需要将其更改为TABLE
。
如果这是更大查询的一部分,则可以将SELECT
存储在WITH
子句中,而不是创建视图或表。
有关共有表支出的更多信息,请参阅:https://dev.mysql.com/doc/refman/8.0/en/with.html.