溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SQLServer怎么獲得用戶最新或前n條訂單

發布時間:2021-08-18 11:33:35 來源:億速云 閱讀:160 作者:chen 欄目:數據庫

本篇內容介紹了“SQLServer怎么獲得用戶最新或前n條訂單”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

  首先我們在Order表中,創建一個索引:

  CREATEUNIQUEINDEXidx_eid_odD_oidDONOrders(EmployeeID,OrderDateDESC,OrderIDDESC)

  多個OrderId是為了在OrderData相同的情況下,按訂單號倒序,是個輔助屬性。

  方法1:

  SELECTEmployeeID,OrderIDFROMOrdersASO1WHEREOrderID=(SELECTTOP(1)OrderIDFROMOrdersASO2WHEREO1.EmployeeID=O2.EmployeeIDORDERBYOrderDateDESC,OrderIDDESC)

  假如想獲得前n條訂單信息,把=號改成IN,然后TOP(n)就可以了。

  不論是取一條還是多條,即使有索引,數據多的情況下,也是最慢的。

  方法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

  這個應用到了SQLServer2005或更高版本的一些新特性,這個效率要比方法2還好。

  假如想取得多條,只需更改TOP(n)即可。

  方法4:

  SELECTO1.EmployeeID,O1.OrderIDFROMOrdersO1JOIN(SELECTROW_NUMBER()OVER(PARTITIONBYEmployeeIDORDERBYOrderDateDESC,OrderIDDESC)ASRowNumber,*FROMOrdersASOT)ASO2ONO1.OrderID=O2.OrderIDWHEREO2.RowNumber=1

  這個ROW_NUMBER函數也是在SQLServer2005后新增的,使用這個和方法3查不多,甚至比3更好,但要注意一點是先按EmployeeID分區,然后再排序。

  結合以上方法,建議用方法3。

“SQLServer怎么獲得用戶最新或前n條訂單”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女