自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SQL Server獲得用戶最新或前n條訂單的SQL語句總結(jié)

數(shù)據(jù)庫 SQL Server
本文我們以實例的形式介紹了SQL Server獲得用戶最新或前n條訂單的幾種SQL語句,并對這幾種方法的效率進(jìn)行了分析,希望能夠?qū)δ兴鶐椭?/div>

SQL Server獲得用戶***或獲取前n條訂單SQL語句的幾種方法是本文我們主要要介紹的內(nèi)容,首先我們先看以下的場景:有一張用戶表,一個訂單表,要求獲得一個用戶對應(yīng)的***的一條訂單信息。實現(xiàn)以上要求,我們可以用以下幾種方式,但是效率卻相差很遠(yuǎn)。

首先我們在Order表中,創(chuàng)建一個索引:

 

  1. CREATE UNIQUE INDEX idx_eid_odD_oidD ON Orders(EmployeeID,OrderDate DESC,OrderID DESC) 

 

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

方法1:

 

  1. SELECT EmployeeID,OrderID FROM Orders AS O1  
  2. WHERE OrderID = (  
  3.     SELECT ***)OrderID FROM Orders AS O2  
  4.     WHERE O1.EmployeeID = O2.EmployeeID  
  5.     ORDER BY OrderDate DESC ,OrderID DESC  

 

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

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

方法2:

 

  1. SELECT O.EmployeeID,O.OrderID FROM (  
  2.     SELECT EmployeeID,(SELECT ***)OrderID FROM Orders AS O2   
  3. WHERE E.EmployeeID = O2.EmployeeID   
  4. ORDER BY OrderDate DESC,OrderID DESC) AS OrderID   
  5.     FROM Employees AS E  
  6. ) AS EO   
  7. INNER JOIN Orders AS O  
  8. ON EO.OrderID = O.OrderID  

 

方法2只能取一條信息,不能取多條信息。

在取一條的情況下,這個要比方法1快多了,因為用戶相比訂單信息要少很多。

方法3:

 

  1. SELECT E.EmployeeID,O.OrderID FROM Employees AS E  
  2. CROSS APPLY (  
  3.     SELECT ***)* FROM Orders AS O1 WHERE E.EmployeeID = O1.EmployeeID ORDER BY O1.OrderDate DESC,O1.OrderID DESC  
  4. ) AS O 

 

這個應(yīng)用到了SQL Server 2005或更高版本的一些新特性,這個效率要比方法2還好。

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

方法4:

 

  1. SELECT O1.EmployeeID,O1.OrderID   
  2. FROM Orders O1 JOIN (  
  3.     SELECT ROW_NUMBER() OVER(PARTITION BY EmployeeID ORDER BY OrderDate DESC,OrderID DESC) AS RowNumber,*   
  4.     FROM Orders AS OT  
  5. ) AS O2  
  6. ON O1.OrderID = O2.OrderID  
  7. WHERE O2.RowNumber = 1 

 

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

結(jié)合以上方法, 建議用方法3。

關(guān)于SQL Server獲得用戶***或前n條訂單的SQL語句的知識的總結(jié)就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!

【編輯推薦】

  1. SQL Server 2008數(shù)據(jù)庫學(xué)習(xí)筆記
  2. SQL Server 2005數(shù)據(jù)庫nolock使用詳解
  3. SQL Server如何啟用Ad Hoc Distributed Queries?
  4. SQL Server 2008用存儲過程實現(xiàn)插入更新數(shù)據(jù)的實例
  5. 含有GROUP BY子句的查詢中如何顯示COUNT()為0的結(jié)果
責(zé)任編輯:趙鵬 來源: 博客園
相關(guān)推薦

2010-07-08 13:32:22

SQL Server

2010-10-21 11:24:02

SQL Server查

2010-09-26 15:15:11

SQL語句

2010-11-09 14:35:48

SQL Server查

2010-07-08 13:26:02

SQL Server

2010-09-06 09:53:41

SQL Server語句

2011-03-22 16:54:58

SQL語句

2010-11-12 13:08:36

動態(tài)sql語句

2010-11-04 11:52:04

DB2分類取前N個記錄

2010-10-21 12:16:11

SQL Server查

2010-11-11 11:13:54

SQL Server

2022-01-05 22:39:35

SQL單用戶模式

2018-12-25 14:40:04

SQL ServerSQL語句數(shù)據(jù)庫

2010-09-06 13:34:37

Sql Server語句

2010-09-28 14:06:43

Sql Server表

2013-10-18 17:24:17

2010-09-07 11:33:04

SQL語句

2010-10-20 10:04:36

sql server自

2010-09-06 09:36:51

SQL語句

2010-09-13 17:11:42

sql server
點贊
收藏

51CTO技術(shù)棧公眾號