first_value()和last_value()字面意思已經很直觀了,取首尾記錄值。
例:查詢部門最先發生銷售記錄日期和最近發生的銷售記錄日期spa
select dept_id ,sale_date ,goods_type ,sale_cnt ,first_value(sale_date) over (partition by dept_id order by sale_date) first_value ,last_value(sale_date) over (partition by dept_id order by sale_date desc) last_value from criss_sales;
看結果first_value()很直觀,不用多解釋
可是,last_value()值,部門D01不是應該爲2014/6/12,部門D02不是應該爲2014/5/2嗎?爲何會每條記錄都不同?
能夠這樣去理解:last_value()默認統計範圍是 rows between unbounded preceding and current row
驗證一下:3d
select dept_id ,sale_date ,goods_type ,sale_cnt ,first_value(sale_date) over (partition by dept_id order by sale_date) first_value ,last_value(sale_date) over (partition by dept_id order by sale_date desc) last_value ,last_value(sale_date) over (partition by dept_id order by sale_date rows between unbounded preceding and unbounded following) last_value_all from criss_sales;
全統計的狀況下獲得的last_value()值,部門D01爲2014/6/12,部門D02爲2014/5/2。code