2017-06-13 50 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