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

求助各位大神,帮个忙看看怎么做这个查询语句
上传图片太慢,小弟就用手打这个表的样子了。

表名:dbo.WR_CLCTPOT_B
id     potcd     tm                q      sumwq      wat    filteflag   flag  wqg 
11720  14093006  2011-11-23 11:00  0.000  10391.000  0.000  null


上面的是表的字段是第一列的数据,现在要做一个查询:要求查出的数据时间是每个月第一天以及最后一天的8:00那个时间段的时间,如果那个时间没有,就顺延往后推,按离8:00最近的时间显示。补充一下,这个每个月,要求是这样的,比如现在是7月,要求查出的时间是6月的第一天8:00和最后一天8:00,如果现在变成8月了,那么数据要求就是7月的,以此类推,下面是网页上面对应的列,大家看看,还是手打。

起始时间               起始指数                         终止时间              终止指数
(这里对应第一天8点)  (对应的数据 sumwq)          (这里是最后一天8点)


小弟实在对SQL语句不了解,求大家伸出友爱之手帮帮忙啊........谢谢了,谢谢了

------解决方案--------------------
create table tb(tm datetime)

insert into tb values('2013-07-16 08:00:00')
insert into tb values('2013-06-01 08:00:00')
insert into tb values('2013-06-01 08:02:00')
insert into tb values('2013-06-30 07:00:00')
insert into tb values('2013-06-30 09:00:00')

select m.tm m_tm, n_tm = (select top 1 * from tb n where datediff(dd , m.tm , n.tm) = 0 and n.tm >= m.tm order by n.tm) 
from 
(
  select convert(varchar(8),dateadd(mm,-1,getdate()),120)+'01 08:00:00' tm union
  select dateadd(dd,-1,convert(varchar(8),getdate(),120)+'01 08:00:00') tm
) m 

drop table tb

/*
m_tm                    n_tm
----------------------- -----------------------
2013-06-01 08:00:00.000 2013-06-01 08:00:00.000