获取SQL Server中给定行之外的n行

时间:2011-09-23 12:09:27

标签: sql-server-2008

我有一个包含列周期的表。此列中的值将是这样的,201101,201102,201103等,201112,201201等。如果我给出一个数字n和任何周期p,那么它必须检索一个句点= p - n。这意味着它必须在之前的某个时期。请帮我怎么做。我使用SQL Server 2008.期间列是整数类型。

3 个答案:

答案 0 :(得分:1)

如果我理解你的需要,试试这个:

SELECT TOP 1 * FROM
(
    SELECT TOP n * FROM your_table
    WHERE period < p
    ORDER BY period DESC) as tb
ORDER BY tb.period

我的想法是首先向后移动n个句点(使用子查询),然后从子查询中获取(使用主查询)最后一个记录。
如果您想要一段时间(不仅仅是一条记录),您可以使用:

SELECT TOP n * FROM your_table
WHERE period < p
ORDER BY period DESC

答案 1 :(得分:0)

如果我理解正确,看起来你需要一个声明。

SELECT period from table where period between n and p

在这种情况下,N和P是整数。

有关SQL的更多信息,请查看http://w3schools.com/sql/default.asp

答案 2 :(得分:0)

你可以试试这个......

select * from your_table
where period = convert(varchar(6),dateadd(m,addnumber,convert(datetime,convert(varchar(6),startperiod)+'01')),112)

addnumer =添加(positiv)或删除(negativ)的月份

startperiod =开始时段

我认为这是一个更好的解决方案,因为如果一个时期实际上不在你的表中,那么你就不会得到错误的结果!