您可以在子查询中使用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;
结果