SQL 使用滞后函数
SQL using lag function
我想要做的是创建一个具有以下规则的列 'ID_DESLIG':
当 STATE 为 'LIGADO' 时,ID_DESLIG 将是前一个 STATE 的 ID 为 'DESLIGADO',对于同一面板;
当STATE为'DESLIGADO'时,ID_DESLIG就是当前行的id;
一个我想要的例子
在此先感谢您的帮助
我想你想要:
select t.*,
(case when state = 'DESLIGADO' then id
else max(case when state = 'DESLIGADO' then id end) over (order by id)
end) as desligado_id
from t;
反过来,这可以简化为:
max(case when state = 'DESLIGADO' then id end) over (order by id)
您可以使用 lag()
来表达这一点,但前提是您知道状态总是交错的。
在标准 SQL(和一些数据库)中,这也可以表示为:
max(id) filter (where state = 'DESLIGADO') over (order by id)
我想要做的是创建一个具有以下规则的列 'ID_DESLIG':
当 STATE 为 'LIGADO' 时,ID_DESLIG 将是前一个 STATE 的 ID 为 'DESLIGADO',对于同一面板;
当STATE为'DESLIGADO'时,ID_DESLIG就是当前行的id;
一个我想要的例子
在此先感谢您的帮助
我想你想要:
select t.*,
(case when state = 'DESLIGADO' then id
else max(case when state = 'DESLIGADO' then id end) over (order by id)
end) as desligado_id
from t;
反过来,这可以简化为:
max(case when state = 'DESLIGADO' then id end) over (order by id)
您可以使用 lag()
来表达这一点,但前提是您知道状态总是交错的。
在标准 SQL(和一些数据库)中,这也可以表示为:
max(id) filter (where state = 'DESLIGADO') over (order by id)