Hive 視窗函式使用(1)

2022-07-11 09:33:13 字數 1684 閱讀 7025

(7) 查詢顧客的購買明細及顧客本月最後一次購買的時間

select name,orderdate,cost,last_value(orderdate,true) over(partition by name,substring(orderdate,1,7) order by orderdate rows between current row and unbounded following)

from business

(6) 查詢顧客的購買明細及顧客本月第一次購買的時間

select name,orderdate,cost,first_value(orderdate,true) over(partition by name,substring(orderdate,1,7) order by orderdate )

from business

(5) 查詢顧客的購買明細及顧客下次的購買時間

select name,orderdate,cost,lead(orderdate,1,'無資料') over(partition by name order by orderdate )

from business

(4)查詢顧客的購買明細及顧客上次的購買時間

select name,orderdate,cost,lag(orderdate,1,'無資料') over(partition by name order by orderdate )

from business

(3)查詢顧客的購買明細要將cost按照日期進行累加

select name,orderdate,cost,sum(cost) over(partition by name order by orderdate )

from business

(2)查詢顧客的購買明細及月購買總額

select name,orderdate,cost,sum(cost) over(partition by name,substring(orderdate,1,7) )

from business

(1)查詢在2023年4月份購買過的顧客及總人數

count()在分組後,統計乙個組內所有的資料!

傳統寫法: 效率低

with tmp as (select name

from business

where year(orderdate)=2017 and month(orderdate)=4

group by name)

select tmp.name,tmp1.totalcount

from

(select count(*) totalcount

from tmp ) tmp1 join tmp;

---------------

select name,count(*) over(rows between unbounded preceding and unbounded following)

from business

where substring(orderdate,1,7)='2017-04'

group by name

等價於select name,count(*) over()

from business

where substring(orderdate,1,7)='2017-04'

group by name

Hive視窗函式使用

平常使用 hive最多的是聚合函式 但對於某些偏分析的需求 group by很費力 子查詢很多 這個時候就需要使用視窗分析函式 比如 最近一次行駛里程 select max ded.bill date ded.vin,ded.current milemetre from db.tt repair d...

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 這個函式會返回組內...