Мог кто-то объяснять

Я одолжил запрос и адаптировал его к моим собственным целям, но мне не нравится делать это, когда я не совсем уверен, что он делает. Документы 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
)
6
задан OMG Ponies 28 February 2010 в 03:13
поделиться

3 ответа

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

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

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

5
ответ дан 10 December 2019 в 00:37
поделиться

Пока отличные ответы.
Иногда помогает наглядный пример:

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.

3
ответ дан 10 December 2019 в 00:37
поделиться

Прочтите это , это довольно просто. "Благодарность Джеффу Смиту "

2
ответ дан 10 December 2019 в 00:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: