Может ли кто-нибудь объяснить, пожалуйста, более - PullRequest
6 голосов
/ 19 февраля 2010

Я позаимствовал запрос и адаптировал его для своих собственных целей, но мне не нравится делать это, когда я не совсем уверен, что он делает.Документы по SQL не являются описательными в этом пункте.Вот что я позаимствовал и изменил, можете ли вы сказать мне, что он делает в основном?

(SELECT Id FROM
    (
        SELECT 
            Id
            ,RANK() OVER ( PARTITION BY DropStatusId ORDER BY StatusDate DESC) [Rank] 
        FROM 
            [dbo].[tblLHTrackingHistory] [TempHistory]
        WHERE 
            [TempHistory].[DropStatusId] = [DropStatus].[Id]
    ) [TT1] WHERE [Rank] = 1
)

Ответы [ 3 ]

5 голосов
/ 19 февраля 2010

Предложение OVER означает, что вы используете аналитику (скажем, агрегаты).Согласно документации OVER :

Определяет разбиение и порядок набора строк перед применением связанной оконной функции.

В отличие от агрегатов, аналитика нене требуется GROUP BY для определения.

3 голосов
/ 19 февраля 2010

Хороших ответов пока нет.
Иногда помогает визуальный пример:

DropStatusId  StatusDate  Rank  
1             2010-02-19  1    <
1             2010-02-18  2
1             2010-02-17  3
2             2010-02-18  1    <
2             2010-02-15  2
2             2010-02-13  3
2             2010-02-12  4

«Раздел» - это записи для данного DropStatusId.

2 голосов
/ 19 февраля 2010

Читать это , это довольно просто. "Кредит Джеффу Смиту"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...