小编art*_*rtm的帖子

替代使用 ROW_NUMBER 以获得更好的性能

我在下面有一个小查询,它RowNumber根据对“LegKey”列进行分区并按 UpdateID desc 排序,在该列下输出一个行号。因此,每个legkey 的最新更新行 (UpdateID) 始终为 1

SELECT *
, ROW_NUMBER() OVER(PARTITION BY LegKey ORDER BY UpdateID DESC) AS RowNumber 
FROM Data.Crew
Run Code Online (Sandbox Code Playgroud)

输出数据:

UpdateID    LegKey  OriginalSourceTableID   UpdateReceived          RowNumber
7359        6641    11                     2016-08-22 16:35:27.487  1
7121        6641    11                     2016-08-15 00:00:47.220  2
8175        6642    11                     2016-08-22 16:35:27.487  1
7122        6642    11                     2016-08-15 00:00:47.220  2
8613        6643    11                     2016-08-22 16:35:27.487  1
7123        6643    11                     2016-08-15 00:00:47.220  2
Run Code Online (Sandbox Code Playgroud)

我使用这种方法的问题是性能变慢,因为我假设我使用的是 ORDER BY。

我的问题是有没有其他方法可以产生类似的结果,但让我的查询运行得更快?我想MAX()可能会起作用,但我没有得到与以前相同的输出。也许我做了MAX()错误的陈述,所以想知道如果有人可以提供一个关于他们如何MAX()为这个例子编写陈述的例子,这是否是一个很好的选择?

谢谢

sql sql-server

2
推荐指数
1
解决办法
1万
查看次数

我的 SQL 查询中的子查询错误

https://screenshot.googleplex.com/j4igYFL9sjH 查找还生产 RAM 容量最低的 PC 的打印机制造商,以及所有具有最低 RAM 容量的 PC 中处理器速度最高的打印机制造商。结果集:制造商。

我的查询:

SELECT maker FROM Product WHERE type ='Printer' AND model IN(SELECT DISTINCT(model), hd, ram FROM PC 
                        WHERE hd = (
                                SELECT MAX(hd) FROM PC 
                                     WHERE model IN(SELECT DISTINCT(model) FROM PC
                                                                       WHERE ram <=(SELECT MIN(ram) FROM PC))));
Run Code Online (Sandbox Code Playgroud)

原来这里面没有厂商名单。我认为子查询有问题。

sql logic subquery

0
推荐指数
1
解决办法
2224
查看次数

标签 统计

sql ×2

logic ×1

sql-server ×1

subquery ×1