oracle 按过滤条件查询前期数据

9ceoxa92  于 2023-03-17  发布在  Oracle
关注(0)|答案(1)|浏览(97)

| 总资产|日产量|创建日期|
| - ------|- ------|- ------|
| 一百|0.01分|小行星2017|
| 二百| -0.01 |小行星2017|
| 三百| -0.01 |小行星2017|
| 四百| -0.01 |小行星2017|
预期结果:
| 总资产|日产量|创建日期|创建日期|
| - ------|- ------|- ------|- ------|
| 一百|0.01分|小行星2017|零|
| 二百| -0.01 |小行星2017|一百|
| 三百| -0.01 |小行星2017|一百|
| 四百| -0.01 |小行星2017|一百|
当create_date =“20171029”时,然后查找day_yiel〉0的pre数据,结果为100

gev0vcfq

gev0vcfq1#

LAGCASE表达式配合使用,查找最近的正值(忽略NULL值):

SELECT t.*,
       LAG(CASE WHEN day_yield > 0 THEN total_assets END)
         IGNORE NULLS OVER (ORDER BY create_date)
         AS last_yield
FROM   table_name t

其中,对于示例数据:

CREATE TABLE table_name(total_assets, day_yield, create_date) AS
SELECT 100, +0.01, DATE '2017-10-26' FROM DUAL UNION ALL
SELECT 200, -0.01, DATE '2017-10-27' FROM DUAL UNION ALL
SELECT 300, -0.01, DATE '2017-10-28' FROM DUAL UNION ALL
SELECT 400, -0.01, DATE '2017-10-29' FROM DUAL;

输出:
| 总计_资产|日产量|创建日期|最终产量|
| - ------|- ------|- ------|- ------|
| 一百|.01口径|2017年10月26日上午00时00分|* 无效 *|
| 二百| -.01 |2017年10月27日上午00时00分|一百|
| 三百| -.01 |2017年10月28日上午00时00分|一百|
| 四百| -.01 |2017年10月29日上午00时00分|一百|
fiddle

相关问题