Hive視窗函式使用

2021-09-13 21:19:58 字數 1094 閱讀 5353

平常使用 hive最多的是聚合函式

但對於某些偏分析的需求(group by很費力、子查詢很多)

這個時候就需要使用視窗分析函式~

比如:最近一次行駛里程

select max(ded.bill_date),ded.vin,ded.current_milemetre

from db.tt_repair_deed ded

where ded.negabalance_sign = 'f'

group by vin,ded.current_milemetre ;

根據vin碼和公里數group by 出來的是多條資料

不符合要求(只需要一條最新的資料)

需要用到rank()視窗函式來實現:

select trd_vin vin,max(trd_current_milemetre) current_miles

from

(select ded.*,rank() over(partition by ded.trd_vin order by ded.trd_bill_date desc) ran_num

from

(select trd_vin,trd_bill_date ,trd_current_milemetre

from asmp.wd_tt_repair_part

where trd_negabalance_sign = 'f'

group by trd_commission_no,trd_sst_code,trd_vin,trd_bill_date,trd_current_milemetre

) ded

)awhere a.ran_num=1

group by a.trd_vin

說明:

(1)大寬表有重複資料需要先group by trd_commission_no,trd_sst_code

(2)where a.ran_num=1有相同的兩個日期,取最大的里程數

Hive 視窗函式使用(1)

7 查詢顧客的購買明細及顧客本月最後一次購買的時間 select name,orderdate,cost,last value orderdate,true over partition by name,substring orderdate,1,7 order by orderdate rows ...

Hive視窗函式

1 定義 視窗函式屬於sql中比較高階的函式 mysql從8.0版本才支援視窗函式,5.6,5.7都沒有視窗函式 oracle 裡面一直支援視窗函式 hive也支援視窗函式 以下函式才是視窗函式 視窗函式 13個 lead lead col,n,default val 往後第n行資料 col 列名 ...

hive 視窗函式

hive高階函式 row number rank dense rank 這三個視窗函式的使用場景非常多 例子 員工表中,求每個崗位薪水前兩名的員工資訊 name,入職日期,sal row number over partition by job order by sal desc 這個函式會返回組內...