SQL - ROW_NUMBER () OVER (ORDER BY) 不起作用

标签 sql sql-server sql-server-2008 sql-order-by analytic-functions

我在 ORDER BY 中放了什么无关紧要子句,结果集的顺序不会改变。

WITH Results AS (
    SELECT DISTINCT 
        MessageThreadUsers.threadFK, 
        MessageThreads.threadDate, 
        Messages.MessageBody, 
        Messages.senderFK,
        Users.userFullName AS senderFullName, 
        ROW_NUMBER() OVER (ORDER BY MessageThreads.threadDate DESC) AS RowNumber

    FROM MessageThreadUsers
        JOIN MessageThreads ON MessageThreadUsers.threadFK = MessageThreads.threadID
        JOIN Messages ON MessageThreads.threadDate = Messages.messageDate
        JOIN Users ON Messages.senderFK = Users.userID

    WHERE userFK = 'usr_developer'
) 
SELECT * FROM Results WHERE RowNumber BETWEEN 1 AND 10

最佳答案

ORDER BY 仅在应用于最外层 SELECT 语句时控制返回行的顺序。

这可能效果更好:

WITH Results AS (
    SELECT DISTINCT 
        MessageThreadUsers.threadFK, 
        MessageThreads.threadDate, 
        Messages.MessageBody, 
        Messages.senderFK,
        Users.userFullName AS senderFullName, 
        ROW_NUMBER() OVER (ORDER BY MessageThreads.threadDate DESC) AS RowNumber

    FROM MessageThreadUsers
        JOIN MessageThreads ON MessageThreadUsers.threadFK = MessageThreads.threadID
        JOIN Messages ON MessageThreads.threadDate = Messages.messageDate
        JOIN Users ON Messages.senderFK = Users.userID

    WHERE userFK = 'usr_developer'
) 
SELECT * FROM Results WHERE RowNumber BETWEEN 1 AND 10
ORDER BY RowNumber

关于SQL - ROW_NUMBER () OVER (ORDER BY) 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9936911/

相关文章:

sql-server - 将大量数据从一列传输到另一列的最有效方式?

SQL 2008 R2 : Could not find stored procedure

tsql - 使用 FOR XML 进行行连接,但具有多列?

c# - 插入当天的最后一秒

mysql - SELECT 行,即使 JOIN 失败

mysql - 单个查询中具有多个选定结果的多个选择语句

SQL Server 查询以获取表中的列列表以及数据类型、NOT NULL 和 PRIMARY KEY 约束

php - Laravel 4 查询生成器 - 具有复杂的左连接

sql-server - 用于插入没有非标识列的表的 SQL 命令是什么

sql-server - sql server 2008 查询问题