首先先上我的SQL表格
图片上传太慢,手打了,各位见谅。id          potcd        tm                   q             sumwq        wat
11702       14093006     2012-07-08 11:30     0.00          1039.00      0
12080       14093001     2012-07-09 12:00                   1121.00      0
12130       14093002     2012-08-09 13:00                   1233.00      0表格主要信息就是这些,手打出来可能显示有点错位,各位担待一二。表名是:dbo.WR_POTFDATA_B我要做的查询是这样:要求从这张表里查询出每个月上一个月的月初第一天以及月末最后一天8点时刻的数据,打个比方说,这个月是7月,那么要求查询出的结果就是6月1号和30号这两天8点时刻和sumwq这个字段的数据,假如现在是8月份了,那么就出来7月份的结果,以此类推,现在我这里找到了一个查询语句,可是一直出现问题,一直报错:“当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式”,各位给看看,我语句哪里有问题,怎么样才能出来我想要的结果?select m.tm m_tm, n_tm = (select top 1 * from WR_POTFDATA_B 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 

解决方案 »

  1.   

    上月的第一天或最后一天的数据:select  * 
    from WR_POTFDATA_B a
    where convert(varchar(19),tm,120)=convert(varchar(8),dateadd(mm,-1,getdate()),120)+'01 08:00:00'
    or convert(varchar(19),tm,120)=dateadd(dd,-1,convert(varchar(8),getdate(),120)+'01 08:00:00')但不一定只有一笔数据,或者是没有(因为你精确到时分秒)
      

  2.   

    我要做的查询是这样:要求从这张表里查询出每个月上一个月的月初第一天以及月末最后一天8点时刻的数据
    既然只要两天的数据,为何楼主这么绕到用exists?
    还有的,你给的数据也没有月初那天和最后那天的数据?
      

  3.   

    需求其实很简单,但看楼主的SQL感觉并没有说清楚
    select tm,sumwq from WR_POTFDATA_B where tm in (
    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')
    )