Я одолжил запрос и адаптировал его к моим собственным целям, но мне не нравится делать это, когда я не совсем уверен, что он делает. Документы 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
)
Пункт OVER
означает, что вы используете аналитику (в отличие от агрегатов). Согласно документации OVER:
Определяет разбиение и упорядочивание набора рядов перед применением соответствующей оконной функции.
В отличие от агрегатов, аналитика не требует определения GROUP BY
.
Пока отличные ответы.
Иногда помогает наглядный пример:
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.
Прочтите это , это довольно просто. "Благодарность Джеффу Смиту "