這是我的表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