我有一个包含列周期的表。此列中的值将是这样的,201101,201102,201103等,201112,201201等。如果我给出一个数字n和任何周期p,那么它必须检索一个句点= p - n。这意味着它必须在之前的某个时期。请帮我怎么做。我使用SQL Server 2008.期间列是整数类型。
答案 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 =开始时段
我认为这是一个更好的解决方案,因为如果一个时期实际上不在你的表中,那么你就不会得到错误的结果!