【发布时间】:2013-05-15 06:42:10
【问题描述】:
我有这张桌子。
+------------------------------------------------------------+
| ks | time | val1 | val2 |
+-------------+---------------+---------------+--------------+
| A | 1 | 1 | 1 |
| B | 1 | 3 | 5 |
| A | 2 | 6 | 7 |
| B | 2 | 10 | 12 |
| A | 4 | 6 | 7 |
| B | 4 | 20 | 26 |
+------------------------------------------------------------+
我想要得到的是每一行,
ks | time | val1 | val1 of next ts of same ks |
要清楚,上面例子的结果应该是,
+------------------------------------------------------------+
| ks | time | val1 | next.val1 |
+-------------+---------------+---------------+--------------+
| A | 1 | 1 | 6 |
| B | 1 | 3 | 10 |
| A | 2 | 6 | 6 |
| B | 2 | 10 | 20 |
| A | 4 | 6 | null |
| B | 4 | 20 | null |
+------------------------------------------------------------+
(对于 value2 我也需要同样的下一个)
我尝试了很多方法来为此提出一个配置单元查询,但仍然没有运气。如here(Quassnoi 的回答)所述,我能够在 sql 中为此编写查询,但无法在 hive 中创建等效项,因为 hive 不支持 select 中的子查询。
有人可以帮我实现吗?
提前致谢。
编辑:
我试过的查询是,
SELECT ks, time, val1, next[0] as next.val1 from
(SELECT ks, time, val1
COALESCE(
(
SELECT Val1, time
FROM myTable mi
WHERE mi.val1 > m.val1 AND mi.ks = m.ks
ORDER BY time
LIMIT 1
), CAST(0 AS BIGINT)) AS next
FROM myTable m
ORDER BY time) t2;
【问题讨论】:
-
用查询更新了问题。谢谢。
-
请更新您的问题和示例以反映您在下面提到的附加要求。谢谢。
-
更新了示例。谢谢。