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

Red*_*pia 3 sql sql-server sql-order-by analytic-functions sql-server-2008

无论我在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
Run Code Online (Sandbox Code Playgroud)

RBa*_*ung 7

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
Run Code Online (Sandbox Code Playgroud)

  • 我刚刚更新了它.在这种情况下,ORDER BY RowNumber更好. (2认同)