2017-06-13 49 views
-1

你好,我對Hive很新,並且正在學習Hive的WINDOWING功能。我遇到了一個問題。Hive Windowing ORDER BY

我試圖找到的最低收盤價爲每個股票代碼(每個股票有22條記錄,我想找到最低) 我寫了一個查詢:

SELECT ticker, close FROM 
    (SELECT ticker, close, RANK() OVER (PARTITION BY ticker) AS rank FROM stocks) AS p 
WHERE rank = 1 LIMIT 10; 

我得到的結果

ticker close 
    A 28.15 
    A 27.93 
    A 28.82 
    A 27.84 
    A 28.29 
    A 28.46 
    A 27.58 
    A 28.73 
    A 29.82 
    A 29.3 

但我希望每個股票都有一個。

然後我跑了相同的查詢倒是ORDER BY子句

SELECT ticker, close FROM 
(SELECT ticker, close, RANK() OVER (PARTITION BY ticker ORDER BY close) AS rank FROM stocks) AS p 
WHERE rank = 1 LIMIT 20; 

而且我得到了理想的結果。

ticker close 
    A 27.16 
    AA 10.57 
    AAPL 247.64 
    ABC 28.71 
    ABT 48.68 
ACE 52.43 
ADBE 27.36 
ADI 28.07 
ADM 27.0 
ADP 39.4 

我在這裏的問題是如何通過分組代碼?

回答

0

如果您未指定「order by」子句,則沒有順序,因此,如果您想要使用不同的排名,則必須使用DENSE_RANK函數,因此該組中的所有元素都具有相同的RANK。

+0

爲什麼組內的排名相同,實際上當我運行排名和密集排名時,每個人對排名和密集排名都有價值1? – Dereck

+0

你能創建一個插入腳本來重現這個問題嗎? – hlagos