日期:2014-05-18  浏览次数:20313 次

请教sql返回最新列值问题!
日期 列A 列B 列C
2011-01-02 1 0 1
2011-01-09 0 1 1
2011-01-15 -1 1 0
2011-01-18 1 -1 0

有上述数据格式,需要安装输入的日期返回列值的最新状态值,
状态值只有1和-1,0代表无状态信息,例:

如果日期条件为 <= 2011-01-16 则结果为:
小于等于1月16日的最新数据位1号的数据,列A 列B的状态分别为 -1 和 1,
列C因为是 0 没有状态信息,需要取它的最近状态信息,最近的状态数据为9号数据,为1,
所以最后结果为:
2011-01-15 -1 1 1

如果日期条件为 <= 2011-02-01 则结果为:
2011-01-18 1 -1 1

需求就是上面描述这样的,不知道描述的是否清晰,还请各位帮忙想想解决方案,谢谢了!

------解决方案--------------------
select max(日期),A.列A,B.列B,C.列C
from T,
(
select top 1 列A
from T
where 日期 <= @date and 列A <> 0
order by 日期 desc 
) A,
(
select top 1 列B
from T
where 日期 <= @date and 列B <> 0
order by 日期 desc 
) B,
(
select top 1 列C
from T
where 日期 <= @date and 列C <> 0
order by 日期 desc 
) C
where 日期 <= @date
order by 日期 desc
------解决方案--------------------
探讨
select top 1 t.* from tb t where 日期 <= '某日期' order by 日期 desc