我在下面有一个小查询,它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()为这个例子编写陈述的例子,这是否是一个很好的选择?
谢谢
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)
原来这里面没有厂商名单。我认为子查询有问题。