이 내 표 그래서두 개의 열이
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
에서 아래 데이터입니다 일치 3의 TOP 찾기 이 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 필요 -이 : 그래서 내가 필요 this-
출력과 같은 출력 뭔가가 필요 내림차순
그리고 이것을 위해 하이브에 rank UDF
(User Defined Function)을 만들었습니다. 그리고 나는 아래 쿼리를 썼다. 아무도 이것에 나를 도울 수 있습니까?
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;
그래서 위의 질의와 나는 위의
Expected Output
의 마지막 두 행을 잃었으로 잘못이
1345653 330760137950 2012-07-09 21:43:29
1345653 330760137950 2012-07-09 21:42:29
1345653 330760137950 2012-07-09 21:41:29
같은 출력을 얻고있다. 아무도 이것으로 나를 도울 수 있습니까?
그래. 나는 하이브에서 일하고있다. 나는 (K testingtable1에서 \t \t로 \t \t 선택 buyer_id, ITEM_ID, created_time, 순위() (buyer_id에 의해 파티션, created_time 내림차순으로 순서를 ITEM_ID 이상))에서,'buyer_id 선택 당신을 수정하여 created_time를이 쿼리를 ITEM_ID 사용하고 으로 x \t 여기서 k <= 3 \t 주문 buyer_id, item_id, created_time desc;에 의해 주문 및 'FAILED : 구문 오류 : 줄 2시 52 분 일치하지 않는 입력'('FROM에서 from 절 기대'. 제안 이유는 무엇입니까? – ferhan
아니 .... 난 몰라. 귀하의 코드는 SQL 서버에서 실행됩니다. 그것은 "테이블"에서 중첩 선택을 좋아하지 않을 수도 있습니다 ..... 당신은 중첩 된 선택을해야 할 수도 있습니다 임시 테이블을 선택한 다음 #temp에서 *를 선택하십시오. 여기서 k <= 3 또는 뭔가 ...? –
또는 하이브에 rank()가 없습니다 ... 죄송합니다! –