本文將介紹 SQL Server 2012 的 T-SQL 新的資料分析函數 - FIRST_VALUE / LAST_VALUE
SQL Server 2012 提供各項的分析函數來幫助開發人員,可以用更有效率且容易維護的方式來撰寫 T-SQL,在上一篇筆者介紹 SQL Server 2012 新增的八大分析函數之中的 LEAD 和 LAG,本文將介紹另外兩個實用的分析函數 - FIRST_VALUE 和 LAST_VALUE。
- FIRST_VALUE 函數語法如下:
1: FIRST_VALUE ( [scalar_expression )
2: OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )
當您將結果集進行排序或資料分割後,要取得整個結果集或資料分割的第一筆資料可以使用 FIRST_VALUE 函數。
下列程式碼示範如何依照 c2 欄位進行資料分割,並利用 FIRST_VALUE 函數取得每個分割的第一筆資料。
1: declare @t table
2: (
3: c1 int identity
4: ,c2 date
5: )
6:
7: insert into @t (c2)
8: select '20120101'
9: union all
10: select '20120201'
11: union all
12: select '20120110'
13: union all
14: select '20120221'
15: union all
16: select '20120121'
17: union all
18: select '20120203'
19: union all
20: select '20120311'
21: union all
22: select '20120321'
23: union all
24: select '20120331'
25:
26: select c1,c2
27: ,FIRST_VALUE(c2) OVER (PARTITION BY MONTH(c2)
28: ORDER BY c2) AS 每個資料分割的第一筆資料
29: from @t
執行結果如下:
- LAST_VALUE 函數語法如下:
1: LAST_VALUE ( [scalar_expression )
2: OVER ( [ partition_by_clause ] order_by_clause rows_range_clause )
當您將結果集進行排序或資料分割後,要取得整個結果集或資料分割的最後一筆資料可以使用 LAST_VALUE 函數。
下列程式碼示範如何依照 c2 欄位進行資料分割,並利用 LAST_VALUE 函數搭配 Window Frame 敘述取得每個分割的第後一筆資料。
1: declare @t table2: (
3: c1 int identity4: ,c2 date5: )
6:
7: insert into @t (c2)8: select '20120101'9: union all10: select '20120201'11: union all12: select '20120110'13: union all14: select '20120221'15: union all16: select '20120121'17: union all18: select '20120203'19: union all20: select '20120311'21: union all22: select '20120321'23: union all24: select '20120331'25:
26: select c1,c227: ,LAST_VALUE(c2) OVER (PARTITION BY MONTH(c2)28: ORDER BY c229: ROWS BETWEEN UNBOUNDED PRECEDING and UNBOUNDED FOLLOWING30: ) AS 每個資料分割的第後筆資料31: from @t
執行結果如下:
【參考資料】