本篇內(nèi)容介紹了“SQLServer怎么獲得用戶新或前n條訂單”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)專注于青岡網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供青岡營銷型網(wǎng)站建設(shè),青岡網(wǎng)站制作、青岡網(wǎng)頁設(shè)計、青岡網(wǎng)站官網(wǎng)定制、小程序定制開發(fā)服務(wù),打造青岡網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供青岡網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。首先我們在Order表中,創(chuàng)建一個索引:
CREATEUNIQUEINDEXidx_eid_odD_oidDONOrders(EmployeeID,OrderDateDESC,OrderIDDESC)
多個OrderId是為了在OrderData相同的情況下,按訂單號倒序,是個輔助屬性。
方法1:
SELECTEmployeeID,OrderIDFROMOrdersASO1WHEREOrderID=(SELECTTOP(1)OrderIDFROMOrdersASO2WHEREO1.EmployeeID=O2.EmployeeIDORDERBYOrderDateDESC,OrderIDDESC)
假如想獲得前n條訂單信息,把=號改成IN,然后TOP(n)就可以了。
不論是取一條還是多條,即使有索引,數(shù)據(jù)多的情況下,也是最慢的。
方法2:
SELECTO.EmployeeID,O.OrderIDFROM(SELECTEmployeeID,(SELECTTOP(1)OrderIDFROMOrdersASO2WHEREE.EmployeeID=O2.EmployeeIDORDERBYOrderDateDESC,OrderIDDESC)ASOrderIDFROMEmployeesASE)ASEOINNERJOINOrdersASOONEO.OrderID=O.OrderID
方法2只能取一條信息,不能取多條信息。
在取一條的情況下,這個要比方法1快多了,因為用戶相比訂單信息要少很多。
SQLServer獲得用戶新或前n條訂單的SQL語句有哪些
方法3:
SELECTE.EmployeeID,O.OrderIDFROMEmployeesASECROSSAPPLY(SELECTTOP(1)*FROMOrdersASO1WHEREE.EmployeeID=O1.EmployeeIDORDERBYO1.OrderDateDESC,O1.OrderIDDESC)ASO
這個應(yīng)用到了SQLServer2005或更高版本的一些新特性,這個效率要比方法2還好。
假如想取得多條,只需更改TOP(n)即可。
方法4:
SELECTO1.EmployeeID,O1.OrderIDFROMOrdersO1JOIN(SELECTROW_NUMBER()OVER(PARTITIONBYEmployeeIDORDERBYOrderDateDESC,OrderIDDESC)ASRowNumber,*FROMOrdersASOT)ASO2ONO1.OrderID=O2.OrderIDWHEREO2.RowNumber=1
這個ROW_NUMBER函數(shù)也是在SQLServer2005后新增的,使用這個和方法3查不多,甚至比3更好,但要注意一點(diǎn)是先按EmployeeID分區(qū),然后再排序。
結(jié)合以上方法,建議用方法3。
“SQLServer怎么獲得用戶新或前n條訂單”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
網(wǎng)頁題目:SQLServer怎么獲得用戶新或前n條訂單-創(chuàng)新互聯(lián)
分享路徑:http://m.rwnh.cn/article12/dsdsdc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、企業(yè)建站、移動網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)站策劃、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容