【发布时间】:2017-12-06 03:41:56
【问题描述】:
我觉得我有一个相当简单的SQL问题要解决,只是不知道如何正确搜索。
假设我有一个表,其中值根据时间更新:
|timestamp|value|session|
|---------|-----|-------|
| ts1 | v1 | s1 |
| ts2 | v2 | s1 |
| ts3 | v3 | s1 |
| ... | .. | s2 |
我想获取当前值和以前的值以及相关的时间戳。
所以结果应该是:
|timestamp_current|value_current|timestamp_prev|value_prev|
|-----------------|-------------|--------------|----------|
| ts2 | v2 | ts1 | v1 |
| ts3 | v3 | ts2 | v2 |
| ... | .. | ... | .. |
如果我只是想获取前一个值而不是前一个时间戳,我认为以下查询是正确的:
select timestamp, value, lag(value,1) over (partition by (session) order by timestamp)
from mytable
但是,从上一行添加两个值的正确方法是什么,我是添加两个 lag 子句还是有更好的方法?
【问题讨论】:
标签: sql hive lag window-functions