选择顶行和底行

Adr*_*ciu 12 sql t-sql sql-server sql-server-2005

我正在使用SQL Server 2005,我正在尝试实现这样的目标:我想在同一个select语句中获取前x行和最后x行.

SELECT TOP(5) BOTTOM(5)
Run Code Online (Sandbox Code Playgroud)

当然BOTTOM不存在,所以我需要另一种解决方案.我相信有一个简单而优雅的解决方案,我没有得到.再次执行选择GROUP BY DESC不是一个选项.

Ral*_*ine 22

使用联合是我能想到的唯一能实现这一目标的东西

select * from (select top(5) * from logins order by USERNAME ASC) a
union
select * from (select top(5) * from logins order by USERNAME DESC) b
Run Code Online (Sandbox Code Playgroud)


hgu*_*yan 8

检查链接

SQL SERVER - 如何使用T-SQL一起检索TOP和BOTTOM行

你尝试过使用rownumber吗?

SELECT * 
FROM 
(SELECT *, ROW_NUMBER() OVER (Order BY columnName) as TopFive
   ,ROW_NUMBER() OVER (Order BY columnName Desc) as BottomFive
   FROM Table
)
WHERE TopFive <=5 or BottomFive <=5
Run Code Online (Sandbox Code Playgroud)

http://www.sqlservercurry.com/2009/02/select-top-n-and-bottom-n-rows-using.html

  • 这会像无腿狗一样奔跑。使用联合 (2认同)

Pau*_*aul 7

我认为你有两个主要选择:

SELECT TOP 5 ...
FROM ...
ORDER BY ... ASC

UNION

SELECT TOP 5 ...
FROM ...
ORDER BY ... DESC
Run Code Online (Sandbox Code Playgroud)

或者,如果您知道表中有多少项:

SELECT ...
FROM (
    SELECT ..., ROW_NUMBER() OVER (ORDER BY ... ASC) AS intRow
    FROM ...
) AS T
WHERE intRow BETWEEN 1 AND 5 OR intRow BETWEEN @Number - 5 AND @Number
Run Code Online (Sandbox Code Playgroud)