用分析函數(shù)row_number() over (partition by ... order by ...)給記錄進行分組編號,按人員id和考勤日期進行分組(如果考勤日期帶時分秒,需先截斷到日),按時間升序排序;這樣,就得到人員ID在同一考勤日期下的編號值(編號值是從1開始的),然后,只取編號值為1的記錄。
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供玉環(huán)網(wǎng)站建設(shè)、玉環(huán)做網(wǎng)站、玉環(huán)網(wǎng)站設(shè)計、玉環(huán)網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、玉環(huán)企業(yè)網(wǎng)站模板建站服務(wù),十余年玉環(huán)做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
SQL類似:
select?s.id,?s.name,?s.date,?s.card_time
from?(
select?d.id,?d.name,?d.date,?d.card_time,?
row_number()?over?(partition?by?d.id,?d.date?order?by?d.card_time)?as?row_idx
from?data_table?d
)?s
where?s.row_idx?=?1
臨近春節(jié),心早已飛了不在工作上了,下面小編給大家整理些數(shù)據(jù)庫的幾種分頁查詢。
Sql
Sever
2005之前版本:
select
top
頁大小
*
from
表名
where
id
not
in
(
select
top
頁大小*(查詢第幾頁-1)
id
from
表名
order
by
id
)
order
by
id
例如:
select
top
10
*
--10
為頁大小
from
[TCCLine].[dbo].[CLine_CommonImage]
where
id
not
in
(
--40是這么計算出來的:10*(5-1)
--
頁大小*(查詢第幾頁-1)
select
top
40
id
from
[TCCLine].[dbo].[CLine_CommonImage]
order
by
id
)
order
by
id
結(jié)果為:
Sql
Sever
2005及以上版本,多了個分頁查詢方法:
/*
*
firstIndex:起始索引
*
pageSize:每頁顯示的數(shù)量
*
orderColumn:排序的字段名
*
SQL:可以是簡單的單表查詢語句,也可以是復(fù)雜的多表聯(lián)合查詢語句
*/
select
top
pageSize
o.*
from
(select
row_number()
over(order
by
orderColumn)
as
rownumber,*
from(SQL)
as
o
where
rownumberfirstIndex;
例如:
select
top
10
numComImg.*
from
(
select
row_number()
over(order
by
id
asc)
as
rownumber,*
from
(select
*
FROM
[TCCLine].[dbo].[CLine_CommonImage])
as
comImg)
as
numComImg
where
rownumber40
結(jié)果:
這兩個方法,就僅僅是多了一列
rewnumber
嗎?當(dāng)然不是,來看下內(nèi)部差別吧:
在兩個SQL上,分別加入以下SQL,并使用MS的“包括執(zhí)行計劃”,便于查看執(zhí)行詳情:
SET
STATISTICS
TIME
ON
GO
要執(zhí)行的SQL:
SET
STATISTICS
TIME
ON
GO
select
top
10
numComImg.*
from
(
select
row_number()
over(order
by
id
asc)
as
rownumber,*
from
(select
*
FROM
[TCCLine].[dbo].[CLine_CommonImage])
as
comImg)
as
numComImg
where
rownumber40
SET
STATISTICS
TIME
ON
GO
select
top
10
*
--10
為頁大小
from
[TCCLine].[dbo].[CLine_CommonImage]
where
id
not
in
(
--40是這么計算出來的:10*(5-1)
--
頁大小*(查詢第幾頁-1)
select
top
40
id
from
[TCCLine].[dbo].[CLine_CommonImage]
order
by
id
)
order
by
id
執(zhí)行之后,查看執(zhí)行計劃:
看得出,兩個同樣功能的SQL,執(zhí)行時,使用
row_number()
的,要比是用
純TOP方式的,查詢開銷少得多,上圖顯示
28:72,純top方式,使用了兩次聚集掃描。
再來看下執(zhí)行時間信息:
row_number()方式的:
純top方式:
相比之下,還是row_number()解析函數(shù)效率比較高寫。
以上所述是小編給大家分享的SQLSERVER分頁查詢關(guān)于使用Top方式和row_number()解析函數(shù)的不同,希望對大家有所幫助。
newid 無參數(shù)
返回一個GUID(全局唯一表示符)值
例如:select newid()
返回:2E6861EF-F4DB-4FFE-86EB-637482FE982J2
isnumeric (任意表達式)
判斷表達式是否為數(shù)值類型或者是否可以轉(zhuǎn)換成數(shù)值。
是:返回1,不是:返回0
例如:select isnumeric(1111) 返回 1
select isnumeric('123rr') 返回 0
select isnumeric('123') 返回 1
isnull (任意表達式1,任意表達式2)
如果任意表達式1不為NULL,則返回它的值;否則,在將任意表達式2的類型轉(zhuǎn)換為任意表達式1的類型(如果這兩個類型不同)后,返回任意表達式2的值。
例如:select isnull(null,N'沒有值') 返回 沒有值
select isnull(N'具體的值',N'沒有值') 返回 具體的值
isdate (任意表達式)
確定輸入表達式是否為有效日期或可轉(zhuǎn)成有效的日期;
是:返回1,不是:返回0
例如:select isdate(getdate()) 返回1
select isdate('2013-01-02') 返回1
select isdate('198') 返回0
1、CONVERT()
函數(shù)
?
1
CONVERT(data_type(length),data_to_be_converted,style)
data_type(length)
規(guī)定目標(biāo)數(shù)據(jù)類型(帶有可選的長度)。data_to_be_converted
含有需要轉(zhuǎn)換的值。style
規(guī)定日期/時間的輸出格式。
可以使用的
style
值:點擊打開鏈接
2、DATEADD()
函數(shù)
點擊打開鏈接
3、CAST()
函數(shù)
?
1
2
Syntax
for
CAST:
CAST
(
expression
AS
data_type
[
(
length
)
]
)
expression
任何有效的表達式。
data_type
目標(biāo)數(shù)據(jù)類型。
這包括
xml、bigint
和
sql_variant。
不能使用別名數(shù)據(jù)類型。
length
指定目標(biāo)數(shù)據(jù)類型長度的可選整數(shù)。
默認(rèn)值為
30。
CONVERT()
函數(shù)與CAST()
函數(shù)詳細(xì)信息:點擊打開鏈接