我有一个表(CURRENT)是从SQL查询中提取的。每个基准都有两个数据点。我需要计算两个数据点的差(即,较新的数据点-较新的数据点),并在行旁边显示结果。
我想这与分组依据有关,但这是我在sql中最薄弱的地方,我不确定如何返回结果以在分组的行旁边显示。我一直想通过做一个“按基准分组”来计算差值,然后获得MAX(VALUE)-Min(VALUE),但是意识到这很愚蠢,因为我无法知道标牌。即使我可以这样做,我也不知道如何显示计算出的值。有什么帮助吗?
谢谢。(甲骨文公司)
CURRENT
DATEF BENCHMARK VALUE
31-Jul-14 A 100
31-Aug-14 A 101
31-Jul-14 B 101
31-Aug-14 B 99
31-Jul-14 C 100
31-Aug-14 C 101
31-Jul-14 D 100
31-Aug-14 D 100
31-Jul-14 E 101
31-Aug-14 E 102
EITHER THIS:
DATEF BENCHMARK VALUE DIFFERENCE
31-Jul-14 A 100 1
31-Aug-14 A 101 1
31-Jul-14 B 101 -2
31-Aug-14 B 99 -2
31-Jul-14 C 100 1
31-Aug-14 C 101 1
31-Jul-14 D 100 0
31-Aug-14 D 100 0
31-Jul-14 E 101 1
31-Aug-14 E 102 1
OR THIS:
DATEF BENCHMARK VALUE DIFFERENCE
31-Jul-14 A 100
31-Aug-14 A 101 1
31-Jul-14 B 101
31-Aug-14 B 99 -2
31-Jul-14 C 100
31-Aug-14 C 101 1
31-Jul-14 D 100
31-Aug-14 D 100 0
31-Jul-14 E 101
31-Aug-14 E 102 1
Oracle提供了FIRST_VALUE()
和LAST_VALUE()
功能,它们似乎正是您所需要的。您的问题是分析/窗口功能之一,而不是聚合。
select c.*,
(last_value(value) over (partition by benchmark order by datef range between unbounded preceding and unbounded following) -
first_value(value) over (partition by benchmark order by datef range between unbounded preceding and unbounded following)
) as difference
from current c;
编辑:
或者,我认为您可以将以上内容简化为:
select c.*,
(first_value(value) over (partition by benchmark order by datef desc) -
first_value(value) over (partition by benchmark order by datef)
) as difference
from current c;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句