select Max(Value)[or Min] from Biao where  shijian1>'2004-5-5 12:18:10' and shijian2<'2004-8-9 14:24:25'

解决方案 »

  1.   

    select datediff(hour,datecol,'2004-5-5 12:18:10')/8,max(value),min(value)
    from t
    where datecol between '2004-5-5 12:18:10' and '2004-8-9 14:24:25'
    group by  datediff(hour,datecol,'2004-5-5 12:18:10')/8
      

  2.   

    to chenlixin007(Aeolus)
    谢谢你的关注,你将题目没有看明白!
      

  3.   

    select datediff(hour,'2004-5-5 12:18:10',datecol)/8
           ,max(value)  as 最大值
           ,min(value)  as 最小值 
    from t
    where datecol between '2004-5-5 12:18:10' and '2004-8-9 14:24:25'
    group by  datediff(hour,datecol,'2004-5-5 12:18:10')/8
      

  4.   

    表的数据:
    date                        wd
    2004-12-18 23:40:00.000 66.1000
    2004-12-18 23:50:00.000 66.1000
    2003-12-18 02:19:00.000 65.6000
    2003-12-18 03:20:00.000 65.8000
    2003-12-18 04:21:00.000 66.4000
    2003-12-18 05:22:00.000 66.8000
    2003-12-18 06:23:00.000 67.3000
    2003-12-18 07:24:00.000 66.7000
    2003-12-18 08:26:00.000 66.5000
    2003-12-19 09:27:00.000 66.6000
    2003-12-19 12:15:00.000 64.6000
    2003-12-19 13:16:00.000 63.3000
    2003-12-19 14:17:00.000 62.1000
    2003-12-19 15:18:00.000 60.2000
    2003-12-19 16:19:00.000 59.2000
    2003-12-19 19:56:00.000 60.5000
    2003-12-19 20:57:00.000 61.1000
    2003-12-19 21:58:00.000 61.2000
    2003-12-19 22:59:00.000 60.8000
    2003-12-20 00:00:00.000 61.4000
    2003-12-20 01:01:00.000 61.7000
    2003-12-20 02:02:00.000 61.6000
    2003-12-20 03:03:00.000 61.5000
    2003-12-20 04:04:00.000 61.6000
    2003-12-20 05:05:00.000 62.2000
    2003-12-20 06:06:00.000 62.6000
    2003-12-20 07:08:00.000 61.8000
    2003-12-20 08:09:00.000 61.0000
    2003-12-20 09:10:00.000 60.1000
    2003-12-20 12:04:00.000 59.6000
    2003-12-20 13:06:00.000 59.8000
    2003-12-20 14:07:00.000 60.0000
    2003-12-20 15:08:00.000 59.9000
    2003-12-20 16:09:00.000 60.0000
    2003-12-20 17:10:00.000 59.8000
    2003-12-20 18:11:00.000 60.5000
    2003-12-20 19:12:00.000 60.9000
    2003-12-20 20:13:00.000 61.5000
    2003-12-20 21:14:00.000 61.9000
    2003-12-20 22:15:00.000 62.3000
    2003-12-20 23:16:00.000 62.7000
    2003-12-21 00:17:00.000 63.1000
    2003-12-21 01:18:00.000 63.3000
    2003-12-21 02:19:00.000 63.1000
    2003-12-21 03:20:00.000 62.9000
    2003-12-21 04:21:00.000 62.9000
    2003-12-21 05:22:00.000 63.0000
    2003-12-21 06:23:00.000 62.9000
    2003-12-21 07:24:00.000 63.1000
    2003-12-21 08:25:00.000 62.1000
    2003-12-21 09:26:00.000 59.4000
    2003-12-21 10:27:00.000 57.8000
    2003-12-21 11:28:00.000 55.9000
    2003-12-21 12:29:00.000 55.2000
    2003-12-21 13:30:00.000 54.6000
    2003-12-21 14:31:00.000 54.3000
    2003-12-21 15:32:00.000 52.1000
    2003-12-21 16:33:00.000 51.1000
    2003-12-21 17:34:00.000 49.7000
    2003-12-21 18:35:00.000 48.6000
    2003-12-21 19:36:00.000 49.2000
    2003-12-21 20:37:00.000 50.5000
    2003-12-21 21:38:00.000 51.2000
    2003-12-21 22:39:00.000 51.2000
    2003-12-21 23:40:00.000 51.1000
    2003-12-22 00:41:00.000 51.0000
    2003-12-22 01:42:00.000 50.9000
    2003-12-22 02:43:00.000 50.7000
    2003-12-22 03:44:00.000 50.6000
    2003-12-22 04:45:00.000 50.5000
    2003-12-22 05:46:00.000 50.5000
    2003-12-22 06:47:00.000 50.2000
    2003-12-22 07:49:00.000 49.8000
    2003-12-22 08:50:00.000 50.8000
    2003-12-22 09:51:00.000 49.8000
    2003-12-22 10:52:00.000 51.8000
    2003-12-22 11:53:00.000 45.5000
    2003-12-22 12:54:00.000 37.5000
    2003-12-22 13:55:00.000 31.4000
    2003-12-22 14:56:00.000 28.2000
    2003-12-22 15:57:00.000 25.9000
    2003-12-22 16:58:00.000 35.0000
    2003-12-22 17:59:00.000 41.4000
    2003-12-22 20:59:00.000 51.1000
    2003-12-22 22:19:00.000 53.1000
    2003-12-22 23:40:00.000 54.3000
    2003-12-23 00:41:00.000 54.4000
    2003-12-23 01:42:00.000 54.4000
    2003-12-23 02:43:00.000 54.4000
    2003-12-23 03:44:00.000 54.4000
    2003-12-23 04:45:00.000 54.4000
    2003-12-23 05:47:00.000 54.4000
    2003-12-23 06:48:00.000 54.4000
    2003-12-23 07:49:00.000 54.4000
    2003-12-23 08:50:00.000 54.4000
    2003-12-23 09:51:00.000 54.4000
    2003-12-23 13:02:00.000 56.0000
    2003-12-23 14:03:00.000 56.4000
    2003-12-23 15:04:00.000 57.0000
    2003-12-23 16:05:00.000 57.6000
    2003-12-23 17:06:00.000 57.8000
    2003-12-23 18:07:00.000 57.9000
    2003-12-23 19:08:00.000 57.7000
    2003-12-23 20:09:00.000 57.6000
    2003-12-23 21:10:00.000 57.6000
    2003-12-23 22:12:00.000 57.6000
    2003-12-23 23:13:00.000 57.7000
    2003-12-24 00:14:00.000 57.6000
      

  5.   

    2004-06-19 00:36:00.000 .0000
    2004-06-19 01:37:00.000 .0000
    2004-06-19 02:38:00.000 .0000
    2004-06-19 03:39:00.000 .0000
    2004-06-19 04:40:00.000 .0000
    2004-06-19 05:41:00.000 .0000
    2004-06-19 06:42:00.000 .0000
    2004-06-19 07:43:00.000 .0000
    2004-06-22 17:09:00.000 .0000
    2004-06-22 18:10:00.000 .0000
    2004-06-22 19:11:00.000 .0000
    2004-06-22 20:12:00.000 .0000
    2004-06-22 21:13:00.000 .0000
    2004-06-22 22:14:00.000 .0000
    2004-06-22 23:15:00.000 .0000
    2004-06-23 00:16:00.000 .0000
    2004-06-23 01:17:00.000 .0000
    2004-06-23 02:18:00.000 .0000
    2004-06-23 03:20:00.000 .0000
    假设上述有n1条记录 每8小时为一时间间隔(上述记录是61分钟记录一次) 则查询的结构最多为 n1/8+1条记录select datediff(hour,'2002-07-04 00:00:00.000',[date])/8 as dat ,[date], 
       max([wd])  as 最大值       ,     min([wd])  as 最小值 
      from   [jktest]
      where [date] between '2002-07-04 00:00:00.000' and '2005-07-04 00:00:00.000'
      group by  datediff(hour,[date],'2002-07-04 00:00:00.000')/8 ,[date]
      

  6.   

    你的结果是 最大值跟最小值相同,记录数跟原来一样多,仅仅是多了一个dat字段,
    没有求出时间间隔内的最大 最小值,你所做的Max Min是针对单条记录进行计算,而不是对时间段内的数据进行计算(你的时间间隔还是61分钟,没有变化),请再帮帮忙吧!
      

  7.   

    如果你想把时间也显示出来就这样
    select a.* 
    from [jktest] a,(select  dat=datediff(hour,'2002-07-04 00:00.000',[date])/8,
                             max([wd]) as 最大值, 
                             min([wd])  as 最小值 
                     from   [jktest]
                     where [date] between '2002-07-04 00:00:00.000' 
                                  and '2005-07-04 00:00:00.000'
                     group by datediff(hour,[date],'2002-07-04 00:00:00.000')/8 ) b
    where datediff(hour,'2002-07-04 00:00.000',a.[date])/8=b.dat
          and a.[wd]=b.最大值 or a.[wd]=b.最小值 
      

  8.   

    你把这里改了 当然不对了   不要改我写的啊 ???group by  datediff(hour,[date],'2002-07-04 00:00:00.000')/8 ,[date]   --不要这样加date 
    用我上面那个试试
      

  9.   

    select a.* 
    from [jktest] a,(select  dat=datediff(hour,'2002-07-04 00:00.000',[date])/8,
                             max([wd]) as 最大值, 
                             min([wd])  as 最小值 
                     from   [jktest]
                     where [date] between '2002-07-04 00:00:00.000' 
                                  and '2005-07-04 00:00:00.000'
                     group by datediff(hour,[date],'2002-07-04 00:00:00.000')/8 ) b
    where datediff(hour,'2002-07-04 00:00.000',a.[date])/8=b.dat
          and (a.[wd]=b.最大值 or a.[wd]=b.最小值)         --忘加括号了
      

  10.   

    不加[date]有语法错误
    如果 这样 group by  datediff(hour,[date],'2002-07-04 00:00:00.000')/8     --不要这
    则:服务器: 消息 8120,级别 16,状态 1,行 1
    列 'jktest.date' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
      

  11.   

    用我最后这个  你写的不对select a.* 
    from [jktest] a,(select  dat=datediff(hour,'2002-07-04 00:00.000',[date])/8,
                             max([wd]) as 最大值, 
                             min([wd])  as 最小值 
                     from   [jktest]
                     where [date] between '2002-07-04 00:00:00.000' 
                                  and '2005-07-04 00:00:00.000'
                     group by datediff(hour,[date],'2002-07-04 00:00:00.000')/8 ) b
    where datediff(hour,'2002-07-04 00:00.000',a.[date])/8=b.dat
          and (a.[wd]=b.最大值 or a.[wd]=b.最小值)
      

  12.   

    结果希望这样:
    如果对数据按 date排序 则查询结果的第一条记录是 求原记录的前8条记录的 最大值 最小值 组合成一条记录,查询的第二条记录是 求原记录的第9-16条记录的 最大值 最小值 组合成一条记录,依次如此
      

  13.   

    我用了最后你说的sql 有语法错误 服务器: 消息 8120,级别 16,状态 1,行 1
    列 'jktest.date' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。请再帮忙吧!
      

  14.   

    你肯定在select 里放 date 列了    我可没那么写
    你是用的这条语句么select a.* 
    from [jktest] a,(select  dat=datediff(hour,'2002-07-04 00:00.000',[date])/8,
                             max([wd]) as 最大值, 
                             min([wd])  as 最小值 
                     from   [jktest]
                     where [date] between '2002-07-04 00:00:00.000' 
                                  and '2005-07-04 00:00:00.000'
                     group by datediff(hour,[date],'2002-07-04 00:00:00.000')/8 ) b
    where datediff(hour,'2002-07-04 00:00.000',a.[date])/8=b.dat
          and (a.[wd]=b.最大值 or a.[wd]=b.最小值)
      

  15.   

    最后的结果展示 code表示记录序号(这个字段可以省略) max 表示每8小时内的最大记录, min表示每8小时内的最小记录 也就是说对每8小时内的数据提取其中的最大值和最小值(监控数据)供领导查看,查看的时间段可能是跨好几天 以8小时为时间间隔提取其中的最大值和最小值
     code       max   min
      

  16.   

    那就这样了
    select b.max,b.min 
    from (select  dat=datediff(hour,'2002-07-04 00:00.000',[date])/8,
                  max=max([wd]) , 
                  min=min([wd]) 
          from   [jktest]
          where [date] between '2002-07-04 00:00:00.000' 
                       and '2005-07-04 00:00:00.000'
          group by datediff(hour,[date],'2002-07-04 00:00:00.000')/8) b
      

  17.   

    用你说的这条sql出现以下情况:服务器: 消息 8120,级别 16,状态 1,行 1
    列 'jktest.date' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。如果在group by 后加上[date]则 在现有表的2120条记录上得到695084条记录 用时13秒
      

  18.   

    select b.max,b.min 
    from (
          select  a.cc,
                  max([wd]) as max , 
                  min([wd]) as min
          from   (select cc=datediff(hour,'2002-07-04 00:00.000',[date])/8,* 
                  from [jktest] ) a
          where a.[date] between '2002-07-04 00:00:00.000' 
                       and '2005-07-04 00:00:00.000'
          group by cc  
         ) b
      

  19.   

    to
    lsxaa(小李铅笔刀) 
    谢谢!
    不过还是有点问题,如果记录时连续的,而且时间段在记录的时间范围内 查询结果正确,但是如果中间有些数据不连贯,或者查询的起始时间 小于数据中的最小时间 或查询终止时间大于数据中的时间结果就不正确了
    最主要的是 中间数据不连贯的问题 这时查询的结果怎样才能保持正确? 比如某天中只记录了一条数据 那么他的最大值同最小值应该是一致的