Вы можете использовать ROW_NUMBER()
с предложением ORDER BY
в подзапросе и использовать этот столбец вместо TOP N
.Это можно объяснить пошагово.
См. Таблицу ниже, в которой есть два столбца NAME
и DT_CREATED
.
Если вам нужно взять только первые две даты независимо от NAME
, вы можете использовать следующий запрос.Логика была написана внутри запроса
-- The number of records can be specified in WHERE clause
SELECT RNO,NAME,DT_CREATED
FROM
(
-- Generates numbers in a column in sequence in the order of date
SELECT ROW_NUMBER() OVER (ORDER BY DT_CREATED) AS RNO,
NAME,DT_CREATED
FROM DEMOTOP
)TAB
WHERE RNO<3;
РЕЗУЛЬТАТ
В некоторых ситуациях нам нужнодля выбора TOP N
результатов, соответствующих каждому NAME
.В таком случае мы можем использовать PARTITION BY
с предложением ORDER BY
в подзапросе.См. Запрос ниже.
-- The number of records can be specified in WHERE clause
SELECT RNO,NAME,DT_CREATED
FROM
(
--Generates numbers in a column in sequence in the order of date for each NAME
SELECT ROW_NUMBER() OVER (PARTITION BY NAME ORDER BY DT_CREATED) AS RNO,
NAME,DT_CREATED
FROM DEMOTOP
)TAB
WHERE RNO<3;
РЕЗУЛЬТАТ