求助LAST_VALUE 等价语法

[复制链接]
查看11 | 回复2 | 2016-5-3 14:05:54 | 显示全部楼层 |阅读模式
本帖最后由 yundesishen 于 2016-5-9 17:42 编辑
在IMPALA中使用LAST_VALUE语法时,发现不支持IGNORE NULLS关键字
想问一下有什么可以替代的语法
数据举例
WITH A AS
(
SELECT '20150401' PROFIT_DAY , 1.01 UNIT_PRICE FRO DUAL
UNION ALL
SELECT '20150402' PROFIT_DAY , 1.20 UNIT_PRICE FRO DUAL
UNION ALL
SELECT '20150403' PROFIT_DAY , NULL UNIT_PRICE FRO DUAL
UNION ALL
SELECT '20150404' PROFIT_DAY , NULLUNIT_PRICE FRO DUAL
UNION ALL
SELECT '20150405' PROFIT_DAY , 0.95 UNIT_PRICE FRO DUAL
)
期望结果
20150401 1.01
20150402 1.20
20150403 1.20
20150404 1.20
20150405 0.95
有想过用NVL(LAST_VALUE,LAG)函数实现 但是不知道怎么计算连续NULL的次数
比如
20150401 1.010
20150402 1.200
20150403 NULL 1
20150404 NULL 2
20150405 0.950



回复

使用道具 举报

千问 | 2016-5-3 14:05:54 | 显示全部楼层

数据库版本低于是10g版本, 太老了
SQL> WITH A AS
2(
3SELECT '20150401' PROFIT_DAY , 1.01 UNIT_PRICE FROm DUAL
4UNION ALL
5SELECT '20150402' PROFIT_DAY , 1.20 UNIT_PRICE FROm DUAL
6UNION ALL
7SELECT '20150403' PROFIT_DAY , NULL UNIT_PRICE FROm DUAL
8UNION ALL
9SELECT '20150404' PROFIT_DAY , NULLUNIT_PRICE FROm DUAL
10UNION ALL
11SELECT '20150405' PROFIT_DAY , 0.95 UNIT_PRICE FROm DUAL
12)
13select profit_day,
14 substr(max(decode(unit_price, null, null, profit_day || unit_price)) over(order by profit_day), 9) unit_price
15from a
16/
PROFIT_DAY UNIT_PRICE
---------- --------------------------------------------------------------------------------
20150401 1.01
20150402 1.2
20150403 1.2
20150404 1.2
20150405 .95
SQL>


回复

使用道具 举报

千问 | 2016-5-3 14:05:54 | 显示全部楼层
bell6248 发表于 2016-5-9 19:30
数据库版本低于是10g版本, 太老了
SQL> WITH A AS

感谢版主
学习到了用 ORDER BY字段作为MAX条件 来保证取到非NULL的最近一条记录




另外不是数据库版本问题。是在HADOOP上跑
HIVE中有LAST_VALUE( ,TRUE)关键字
在IMPALA中完全没有办法 只能绕过去了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行