- 时间:2020-05-12 13:18 编辑: 来源: 阅读:
- 扫一扫,手机访问
摘要:SQLServer 获得用户最新或前n条订单的几种SQL语句小结
实现以上要求,我们可以用以下几种方式,但是效率却相差很远。
首先我们在Order表中,创建一个索引:
CREATE UNIQUE INDEX idx_eid_odD_oidD ON Orders(EmployeeID,OrderDate DESC,OrderID DESC)
多个OrderId是为了在OrderData相同的情况下,按订单号倒序,是个辅助属性。
方法1:
[url=http://www.1sucai.cn/article/28105.htm]http://www.1sucai.cn/article/28105.htm[/url]
方法4:
SELECT O1.EmployeeID,O1.OrderID
FROM Orders O1 JOIN (
SELECT ROW_NUMBER() OVER(PARTITION BY EmployeeID ORDER BY OrderDate DESC,OrderID DESC) AS RowNumber,*
FROM Orders AS OT
) AS O2
ON O1.OrderID = O2.OrderID
WHERE O2.RowNumber = 1
这个ROW_NUMBER函数也是在SQL Server 2005后新增的,使用这个和方法3查不多,甚至比3更好,但要注意一点是先按EmployeeID分区,然后再排序。
结合以上方法, 建议用方法3。