天天看點

每日SQL自學知識點(第三天)—lead的視窗函數、datediff函數

作者:珑珑愛音樂

1)lead的視窗函數用法

  • 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

FROM exam_record;

每日SQL自學知識點(第三天)—lead的視窗函數、datediff函數

2)datediff 函數

  • datediff(時間1,時間2):計算兩個日期之間間隔的天數,機關為日
  • timestampdiff(時間機關,開始時間,結束時間):兩個日期的時間差,傳回的時間差形式由時間機關決定(日,周,月,年)
  • date_add(日期,INTERVAL n 時間機關) :傳回加上n個時間機關後的日期
  • date_sub(日期,INTERVAL n 時間機關 ):傳回減去n個時間機關後的日期
  • date_format(時間,‘%Y-%m-%d’):強制轉換時間為所需要的格式
每日SQL自學知識點(第三天)—lead的視窗函數、datediff函數

3)datediff和timestampdiff函數的差別

  • datediff()函數的作用是求日期差,也就是把一個時間的日期部分取出來求差。例如:'2021-09-05 12:00:00'和'2021-09-04 11:00:00'這兩個日期,datediff隻取2021-09-05和2021-09-04求日期差,并不會管後面的時間部分。
  • timestampdiff()函數的作用則是求時間戳的差,例如:'2021-09-05 12:00:00'和'2021-09-04 11:00:00'這兩個日期,datediff隻會先求出這個日期的時分秒差,之後再轉換成天數來求日期差。

直接說可能有點懵,看完差别後,具體來看下面這個例子:

#先看第一組時間差是23小時,日期差(9月5日-9月4日)是1天

select DATEDIFF('2021-09-05 12:00:00','2021-09-04 11:00:00') datediff_1,

TIMESTAMPDIFF(hour,'2021-09-04 12:00:00','2021-09-05 11:00:00') hourdiff_1,

TIMESTAMPDIFF(day,'2021-09-04 12:00:00','2021-09-05 11:00:00')timediff_1;

每日SQL自學知識點(第三天)—lead的視窗函數、datediff函數

#再看第二組時間差是28小時,日期差(9月5日-9月4日)是1天

select DATEDIFF('2021-09-05 16:00:00','2021-09-04 11:00:00') datediff_2,

TIMESTAMPDIFF(hour,'2021-09-04 12:00:00','2021-09-05 16:00:00') hourdiff_2,

TIMESTAMPDIFF(day,'2021-09-04 12:00:00','2021-09-05 16:00:00')timediff_2;

每日SQL自學知識點(第三天)—lead的視窗函數、datediff函數

繼續閱讀