这是我的表1查找TOP 3的两列匹配
BID PID TIME
---------+-------------------+----------------------
1345653 330760137950 2012-07-09 21:42:29
1345653 330760137950 2012-07-09 21:43:29
1345653 330760137950 2012-07-09 21:40:29
1345653 330760137950 2012-07-09 21:41:29
1345653 110909316904 2012-07-09 21:29:06
1345653 221065796761 2012-07-09 19:31:48
所以下面的数据。如果我需要澄清上述scenario-我喜欢这个 - 用户1345653
我在上面的表中的数据此PID 330760137950
four times
但具有不同的时间戳。所以,我需要输出像这个 -
输出我需要: -
1345653 330760137950 2012-07-09 21:43:29
1345653 330760137950 2012-07-09 21:42:29
1345653 330760137950 2012-07-09 21:41:29
1345653 110909316904 2012-07-09 21:29:06
1345653 221065796761 2012-07-09 19:31:48
所以基本上如果BID
和PID
是相同的,但不同的timestamps
,然后我需要那些随时间排序的TOP 3降序
为此,我在Hive中创建了rank UDF
(用户定义函数)。我写了下面的查询,但它不适合我。谁可以帮我这个事?
SELECT bid, pid, rank(bid), time, UNIX_TIMESTAMP(time)
FROM (
SELECT bid, pid, time
FROM table1
where to_date(from_unixtime(cast(UNIX_TIMESTAMP(time) as int))) = '2012-07-09'
DISTRIBUTE BY bid,pid
SORT BY bid, time desc
) a
WHERE rank(bid) < 3;
因此,与上面的查询我收到输出这样
1345653 330760137950 2012-07-09 21:43:29
1345653 330760137950 2012-07-09 21:42:29
1345653 330760137950 2012-07-09 21:41:29
这是错误的,因为我缺少上述Expected Output
的最后两行。谁能帮我这个?
是的。我在蜂巢工作。我使用此查询通过修改您的'选择buyer_id,ITEM_ID,CREATED_TIME从( \t \t选择buyer_id,ITEM_ID,CREATED_TIME,秩()以上(由buyer_id分区,由CREATED_TIME降序ITEM_ID顺序)为k \t \t从testingtable1)作为x \t其中k <= 3 \t order by buyer_id,item_id,created_time desc;'我得到的错误是'FAILED:解析错误:行2:52不匹配的输入'('期望FROM from子句'。建议为什么它是这样的? – ferhan 2012-07-19 21:43:08
没有....我不知道你的代码在sql server中运行它可能不喜欢那个嵌套select作为唯一的“表”.....你可能需要将嵌套select一个临时表,然后从#temp中选择*,其中k <= 3或其他......? – 2012-07-19 21:49:18
或配置单元没有rank()...对不起! – 2012-07-19 21:52:53