我正在编写一个代码,在这里我想查询数据库以更新日志实例以反映项目的最终状态。例如:
将被翻译为:
到目前为止,我的代码是:
SELECT a.ID, a.date, a.eval_group,
CASE WHEN a.date > b.date
AND eval_group = ('completed' OR 'canceled')
THEN
b.eval_group
ELSE
a.eval group
END AS new_eval_group
FROM temp as a
JOIN temp as b
ON a.ID = b.ID
我不确定如何从这里开始,希望您能有所指路。我不习惯使用SQL,也不知道如何使该功能在语言中起作用!
答案 0 :(得分:1)
您可以为此使用窗口功能。您似乎想要最后一个状态,可以使用first_value()
和降序排序:
select t.*,
first_value(eval_group) over (partition by id order by date desc) as new_eval_group
from t;
如果您只想“完成”和“取消”,则可以使用filter
:
select t.*,
first_value(eval_group) filter (where eval_group in ('finished', 'canceled') over (partition by id order by date desc) as new_eval_group
from t;