sql - SQL - 遍历行两次并追溯更改值
问题描述
我正在编写一个代码,我想在其中查询数据库以更新日志实例以反映项目的最终状态。例如:
将被翻译为:
到目前为止,我的代码是:
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,也不知道如何使这个函数在语言中工作!
解决方案
您可以为此使用窗口函数。您似乎想要最后一个状态,您可以使用它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;
推荐阅读
- javascript - 以角反应形式显示输入框
- android - java.lang.UnsatisfiedLinkError:未找到实现(NDK,Kotlin) - 已修复
- mybatis - 全局设置mybatis执行器模式为BATCH可以吗?
- php - 哪个是 laravel 正确的数据库表结构?
- git - 由于项目双重克隆,无法运行自动化测试
- c# - if/else 潜在大条件的最佳方法
- java - Spring Boot JPA 设置自定义数据源
- angular - 警告:清理不安全的样式值
- groovy - 功能实现
- javascript - toLocaleString() 不适用于输入更改