本文章總結(jié)了現(xiàn)在常用的幾種數(shù)據(jù)庫獲取前幾條記錄的sql,包括有db2,oracle,sqlserver和mysql數(shù)據(jù)庫,各位可參考.
SQLITE數(shù)據(jù)庫,代碼如下:
select * from table limit N
db2數(shù)據(jù)庫,代碼如下:
select * from tab fetch first 10 rows only
oracle數(shù)據(jù)庫,代碼如下:
select * from tab where rownum <=10
sqlserver數(shù)據(jù)庫,代碼如下:
select top 10 * from tab
1)如果表中有主鍵,可以用IN的方式,代碼如下:
- SELECT * FROM tmp_Trans t
- WHERE ID IN(
- SELECT TOP 2 ID
- FROM tmp_Trans
- WHERE PO_NO=t.PO_NO
- ORDER BY Trans_Date DESC
- )
2)如果沒有主鍵,可以用判斷在本條記錄前有多少條記錄的方式,但使用這種方式時(shí)如果遇到Trans_Date相同的情況會(huì)不準(zhǔn),如當(dāng)存在Trans_Date最大的記錄有三條時(shí),這三條記錄都會(huì)查出來,代碼如下:
- SELECT *
- FROM tmp_Trans t
- WHERE (
- SELECT COUNT(*)
- FROM tmp_Trans
- WHERE PO_NO=t.PO_NO AND Trans_Date>T.Trans_Date
- )<2 --Vevb.com
3)使用CROSS APPLY子句,CROSS APPLY是SQL Server 2005后出來的新功能,用于在表連接時(shí)傳入?yún)?shù),代碼如下:
- SELECT DISTINCT b.*
- FROM tmp_Trans a
- CROSS APPLY
- (
- SELECT TOP(2) * FROM tmp_Trans WHERE a.PO_NO=PO_NO ORDER BY Trans_Date DESC
- ) b
2.使用自動(dòng)生成的Row Number,在使用 ROW_NUMBER()時(shí)可以用PARTITION BY子句來分組,建議使用這種方式,代碼如下:
- select * from (
- select ROW_NUMBER() OVER(PARTITION BY PO_NO ORDER BY Trans_Date DESC) as rowid,*
- from tmp_Trans
- ) a
- where rowid<=2
mysql數(shù)據(jù)庫,代碼如下:
select * from tab limit 10
注意:對Oracle的查詢中,如果有如下order by子句,查詢出來的數(shù)據(jù)可能不是你想要的.
Oracle處理流程是:先搜索出rownum<2 的信息,再排序,代碼如下:
select table_name from t_tables where rownum<2 order by table_name desc;
需要寫成如下方式:select t2.* from (select * from t_tables t order by table_name desc) t2 where rownum<2
|
新聞熱點(diǎn)
疑難解答
圖片精選