MySQL視窗函式的使用

2022-10-11 05:00:17 字數 2680 閱讀 6391

1.from

2.where

3.group by...sum().. h**ing...

4.select

5.order by

計算兩個date型之間的天數差

注意:結果是前-後,如果想得到正數差,截止時間放前面

計算兩日期時間之間相差的天數,秒數,分鐘數,週數,小時數,這裡主要分享的是通過mysql內建的函式 timestampdiff() 實現。

注意:如果是計算粗略天數,需要先使用date_format將'%y-%m-%d %h:%i:%s'格式的日期轉化為『%y-%m-%d』格式

返回日期或日期時間表示式datetime_expr1 和datetime_expr2the 之間的整數差。其中unit單位有如下幾種,分別是:frac_second (microseconds), second, minute, hour, day, week, month, quarter, year 。該引數具體釋義如下:

frac_second   表示間隔是毫秒

second 秒

minute 分鐘

hour 小時

day 天

week 星期

month 月

quarter 季度

year 年

例如:

#計算兩日期之間相差多少周

select timestampdiff(week,'2011-09-30','2015-05-04');

#計算兩日期之間相差多少天

select timestampdiff(day,'2011-09-30','2015-05-04');

返回加上n個時間單位後的日期,單位可以是month/week/day/hour/minute等等

返回減去n個時間單位後的日期

強制轉換時間為所需要的格式,如:'%y-%m-%d %h:%i:%s'

'%y%m'

'%y/%m'

'%y-%m'

lead(欄位名,n) over () :取值向後偏移n行(空間的理解就是直接將一列資料往前推n個位置,後面的位置就空出來了,具體配合理解);

lag(欄位名,n) over () :取值向前偏移n行(空間的理解就是直接將一列資料往前後n個位置,前面的位置就空出來了,具體配合理解);

lag(欄位名,n,x) over () :取值向前偏移n行,並將空值填充為數字x(空間的理解就是直接將一列資料往前後n個位置,前面的空出來的位置用x填充上,具體配合理解) 。

select id,score,lead(score,2) over(order by id) lead_score,-- score數列向前推動2位,後面就騰空了2個位置

lag(score,2) over(order by id) lag_score, -- score數列向後推2位,騰空2個位置

lag(score,2,666) over(order by id) lag_score_3 -- score數列向後推動2位,空值被填充為666

first_value()是乙個視窗函式,允許您選擇視窗框架,分割槽或結果集的第一行。

first_value(expression) over (

[partition_clause]

[order_clause]

[frame_clause]

)

nth_value()是乙個視窗函式,允許您從有序行集中的第n行獲取值

nth_value()函式返回expression視窗框架第n行的值。如果第n行不存在,則函式返回null。n必須是正整數,例如1,2和3。

可以結合order by 排序來使用

nth_value(expression, n)

from first

over (

partition_clause

order_clause

frame_clause

)

計算分割槽或結果集中行的百分位數排名

percent_rank()函式返回乙個從0到1的數字。

percent_rank()對於分割槽或結果集中的第一行,函式始終返回零。重複的列值將接收相同的percent_rank()值。

對於指定的行,percent_rank()計算行的等級減1,除以評估的分割槽或查詢結果集中的行數減1:

(rank - 1) / (total_rows - 1)
為分割槽或結果集中的每一行分配排名,而排名值沒有間隙

如果分割槽具有兩個或更多具有相同排名值的行,則將為這些行中的每一行分配相同的排名。

與rank()函式不同,dense_rank()函式始終返回連續的排名值

為從1開始應用的每一行分配乙個序號,連續且不重複

Hive視窗函式使用

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

MySQL 視窗函式高階處理

視窗函式種類 練習題參考 視窗函式也稱為olap函式。olap 是online analyticalprocessing 的簡稱,意思是對資料庫資料進行實時分析處理。為了便於理解,稱之為視窗函式。常規的select語句都是對整張表進行查詢,而視窗函式可以讓我們有選擇的去某一部分資料進行彙總 計算和排...

Hive 視窗函式使用(1)

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