gpt4 book ai didi

SQL - 过滤后的顺序

转载 作者:行者123 更新时间:2023-12-02 08:57:29 24 4
gpt4 key购买 nike

如何在 TSQL (SQL Server) 中对数据进行排序并然后对其进行过滤?

我尝试过这样的事情:

SELECT [Job].*, 
ROW_NUMBER() OVER (ORDER BY [Job].[Date]) AS RowNum
FROM [Job]
ORDER BY Rank
WHERE RowNum >= @Start AND RowNum < @End

不起作用。我还尝试使用子查询,它会抛出:

The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified.

我不想使用 TOP 或 FOR XML。

如何解决这个问题?

最佳答案

使用 CTE。请注意,本例中的“内部”ORDER BY 由 ROW_NUMBER/OVER 隐含。

;WITH cBase AS
(
SELECT
[Job].*,
ROW_NUMBER() OVER (ORDER BY [Job].[Date]) AS RowNum
FROM
[Job]
)
SELECT
*
FROM
cBase
WHERE
RowNum >= @Start AND RowNum < @End
--ORDER BY
--output order

编辑:

您在@Start 和@End 之间的搜索是按照日期ROW_NUMBER 生成的顺序进行的。排名与此顺序无关。排名(假设它是表中的一列)将被忽略,因为您的序列是在日期上。您不需要对其进行排序。

如果“rank”实际上是“RowNum”,那么您仍然不需要“内部”排序,因为它是一个集合操作。不过,您将需要在最外面的排序中使用它。

如果排名是日期的次要排序,则使用此:

ROW_NUMBER() OVER (ORDER BY [Job].[Date], [Job].[Rank]) AS RowNum

关于SQL - 过滤后的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3874002/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com