SQL 中每个相同数据的前 2 行

Top 2 Rows from every same data in SQL

这是面试题。 如果假设我有一个 table & 在那个 table 只有一列。

   Details

    a
    a
    a
    a
    b
    b
    b
    c
    d
    d
    d 

这是数据。现在我想要每个组的前 2 名。

Details
a
a
b
b
c
d
d

如何得到这个结果。

使用Window Function获取每组中的前两行

SELECT Details
FROM   (SELECT *,
               Row_number()OVER(partition BY Details ORDER BY Details) rn
        FROM   tablename) a
WHERE  rn <= 2 

注意:order by 中根据您的要求将顺序更改为 AscDesc