【发布时间】:2020-08-24 15:59:14
【问题描述】:
我想做的是使用以下规则创建一个列“ID_DESLIG”:
-
当 STATE 为 'LIGADO' 时,ID_DESLIG 将是前一个 STATE 为 'DESLIGADO' 的 id,对于同一个面板;
-
当 STATE 为 'DESLIGADO' 时,ID_DESLIG 将是当前行的 id;
我想要的一个例子
提前感谢您的帮助
【问题讨论】:
-
用您正在使用的数据库标记您的问题。
我想做的是使用以下规则创建一个列“ID_DESLIG”:
当 STATE 为 'LIGADO' 时,ID_DESLIG 将是前一个 STATE 为 'DESLIGADO' 的 id,对于同一个面板;
当 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)
【讨论】: