sql - 如何将 LAG 函数与 WHERE 子句结合使用?
问题描述
我想使用 LAG 函数来显示之前的可用金额,但是当之前的可用金额的 value_date 为“reimbursment”时,它将继续使用非报销类型的最后一个
这意味着 LAG 应应用于 previous_availability 字段,如下所示:
价值日期 | 未来可用性 | 以前的可用性 | 精确日期 |
---|---|---|---|
当前 EOD | 10 | 无效的 | 2020-12-18 |
报销 | 2 | 10 | 2020-12-19 |
报销 | 3 | 10 | 2020-12-20 |
报销 | 4 | 10 | 2020-12-22 |
报销 | 5 | 10 | 2022-01-18 |
利用率 | 6 | 10 | 2022-01-19 |
报销 | 7 | 6 | 2022-03-18 |
期限到期 | 8 | 6 | 2022-07-18 |
报销 | 9 | 8 | 2025-01-01 |
谢谢!
解决方案
(注意:这是在precise_date
添加到问题之前发布的)
如果你有一个索引id
:
-- drop table mytable;
create table mytable (
id integer,
value_date varchar(20),
future_availability integer);
insert into mytable values
(1,'Current EOD', 10),
(2,'reimbursment', 2 ),
(3,'reimbursment', 3 ),
(4,'reimbursment', 4 ),
(5,'reimbursment', 5 ),
(6,'utilization', 6 ),
(7,'reimbursment', 7 ),
(8,'Limit Maturity', 8 ),
(9,'reimbursment', 9 );
select
value_date,
future_availability,
(select TOP 1 m2.future_availability
from mytable m2
where m2.id<m1.id and m2.value_date<>'reimbursment'
order by id desc
) as previous_availability
from mytable m1;
输出将是:
+ --------------- + ------------------------ + -------------------------- +
| value_date | future_availability | previous_availability |
+ --------------- + ------------------------ + -------------------------- +
| Current EOD | 10 | |
| reimbursment | 2 | 10 |
| reimbursment | 3 | 10 |
| reimbursment | 4 | 10 |
| reimbursment | 5 | 10 |
| utilization | 6 | 10 |
| reimbursment | 7 | 6 |
| Limit Maturity | 8 | 6 |
| reimbursment | 9 | 8 |
+ --------------- + ------------------------ + -------------------------- +
但是是没有使用该LAG
功能。
编辑:删除limit 1
和添加TOP 1
,因为这是关于 MSSQL。
推荐阅读
- angular - 在 Angular 6 中动态改变研磨尺寸
- python - 如何使用 mean_squared_error 作为 sklearn.model_selection.cross_val_score() 的损失
- python - 用枕头在python 3中导入图像
- c++ - 是否可以从创建它的 main() 外部访问公共类成员?
- java - 单击每个单独的按钮后如何禁用所有按钮?
- c - 如何在 c 中捕获或发送 ctr + p 到进程,使用 kill 将 ctr + p 发送到 qemu
- node.js - 从视频中提取帧?
- python - pandas 如何将一列数据转换为另一列?
- vb.net - MSI 文件类型错误的 Visual Basic 下载文件方法
- c++ - 字母选择排序程序的问题