日期:2014-05-17  浏览次数:20810 次

sql语句 sql 查询符合条件的上面一条
sql 查询结果要查询工作日
 如果条件是-1 就是当前日期的前一个工作日
 如果条件是-2 就是当前日期的前的第二个作日
数据库字段
日期  
状态   0:节假日; 1:工作日; 

------解决方案--------------------
是这样吗:
select *
from 表
where DATEDIFF(day,getdate(),你的日期字段) = -1 -- 前1天

select *
from 表
where DATEDIFF(day,getdate(),你的日期字段) = -2 -- 前2天

------解决方案--------------------
2楼少了对状态的判断
------解决方案--------------------
引用:
这样的话   -3  -4 怎么办呢。。。。。头好大啊,谢谢各位帮忙


--> 测试数据:[a]
if object_id('[a]') is not null drop table [a]
go 
create table [a](  [日期] datetime, [状态] int)
insert [a]
select'2014/1/1',0 union all
select'2014/1/2',1 union all
select'2014/1/3',1 union all
select'2014/1/4',0 union all
select'2014/1/5',0 union all
select'2014/1/6',1 union all
select'2014/1/7',1 union all
select'2014/1/8',1 union all
select'2014/1/9',1 union all
select'2014/1/10',1 
--建立b表
select *,row_number() over(order by [日期]) as rn  into b from a where [状态] =1 

select convert(varchar(10),a.[日期],120) as [日期] ,a.[状态],
convert(varchar(10),max(b.[日期1]),120) as [前N个工作日]
 from a left join 
(
select a.[日期],b.[日期]as [日期1]  from 
(
select a.[日期],max(b.rn) as rn from b a left join b b 
on a.rn-1 >b.rn-2--'-1是参数'
group by a.[日期]
)a left join b b on a.rn=b.rn
) b on a.[日期]>b.[日期]
group by a.[日期],a.[状态]
order by a.[日期]

整个活的~~动态的!
日期         状态          前N个工作日
---------- ----------- ----------
2014-01-01 0           NULL
2014-01-02 1           NULL
2014-01-03 1           2014-01-02
2014-01-04 0           2014-01-03
2014-01-05 0           2014-01-03
2014-01-06 1     &nb