首页 > 解决方案 > 如何有效地查询“后”和“前”所有行的“有序”行?

问题描述

我有一个看起来像这样的表:

Time        Id

10:00        2
11:00        1
12:00        4
12:00        3
13:00        5

顺序对于业务逻辑很重要,顺序是Time降序,然后Id降序。当我添加/更改一行时,我需要对“之后”(根据给定顺序)的所有行进行查询,包括给定行和一个“上一个”行。

我没有设法弄清楚如何比这样的 2 个查询更好:

SELECT ... WHERE Time > @Time OR (Time = @Time AND Id >= @Id) // Get all rows after and including
SELECT TOP 1 ... WHERE Time < @Time OR (Time = @Time AND Id < @Id) ORDER BY Time DESC, Id DESC // Get previous

我想知道是否有更有效的方式来执行查询?

示例 1:

我需要更新 ID 为 3 的行,然后我需要查询返回 ID 为 3、4、5 的行和前一个 ID 为 1 的行

示例 2:

我需要更新 ID 为 4 的行,然后我需要查询返回 ID 为 4,5 的行和前一个 ID 为 3 的行

标签: sqlsql-serversql-order-by

解决方案


推荐阅读