2

Не имеет значения, что я положил в предложение ORDER BY, порядок набора результатов не изменяется.SQL - ROW_NUMBER() OVER (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 
+1

Какая база данных это? SQL Server? Какая версия? –

+0

SQL Server 2008 – Redtopia

+0

ORDER BY в предложении OVER предназначен только для ROW_NUMBER - ORDER BY является единственным средством управления порядком конечного набора результатов. –

ответ

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 
+0

ОК, я думаю, я не понимаю, как я должен использовать эту конструкцию для создания результирующих наборов. Можете ли вы предложить предложение опубликовать эти результаты? – Redtopia

+0

Я ВИДЕТЬ! Я не заметил новый «ORDER BY ThreadDate» в нижней части вашего ответа. – Redtopia

+1

Я только что обновил его. ORDER BY RowNumber лучше в этом случае. – RBarryYoung

Смежные вопросы