精读《15 大 LOD 表达式 - 下》

接着上一篇 精读《15 大 LOD 表达式 - 上》 ,这次继续总结 Top 15 LOD Expressions 这篇文章的 9~15 场景。

9. 某时间段内最后一天的值

如何实现股票平均每日收盘价与当月最后一天收盘价的对比趋势图?

e6a3682880f3f20a0ef45accc9ffb371.png

如图所示,要对比的并非是某个时间段,而是当月最后一天的收盘价,因此必须要借助 LOD 表达式。

设想原表如下:

Date Ticker Adj Close
29/08/2013 SYMC $1
28/08/2013 SYMC $2
27/08/2013 SYMC $3

我们按照月进行聚合作为横轴,求 avg([Adj Close]) 作为纵轴即可。但计算对比我们需要一个 Max Date 字段如下:

Date Ticker Adj Close Max, Date
29/08/2013 SYMC $1 29/08/2013
28/08/2013 SYMC $2 29/08/2013
27/08/2013 SYMC $3 29/08/2013

如果我们使用 max(Date) 表达式,在聚合后结果是可以看到 Max Date 的:

Month of Date Ticker Avg, Adj Close Max, Date
08/2013 SYMC $2 29/08/2013

原因是,max(Date) 是一个聚合表达式,只能在 group by 聚合 sql 下生效。但如果我们要计算最后一天的收盘价,就要执行 sum([Close value on last day],表达式如下:

[Close value on last day] = if [Max Date] = [Date] then [Adj Close] else 0 end

但问题是,这个表达式计算的明细级别是以天为粒度的,我们 max(Date) 在天粒度下是算不出来的:

Date Ticker Adj Close Max, Date
29/08/2013 SYMC $1
28/08/2013 SYMC $2
<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值