[求]判断有顺序的一组数中,是否有连续n个数均为正?
  Mysql数据库
  记录名:a、b、c、d
  记录字段:id ,name,value,date  例:
id      name     value         date
1  a   -3.3   2007-8-27
2  b   2.6   2007-8-27
3  c   -9.3   2007-8-274  d   7.4   2007-8-275  a   8.2   2007-8-28
6  b   -8.1   2007-8-28
7  c   2.4   2007-8-28
8  d   4.0   2007-8-28
........

解决方案 »

  1.   

     (不要高估你的汉语表达能力或者我的汉语理解能力)
       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  2.   

    想查找哪个记录(a或b或c或d)自其有连续的3天的value值均为正数,怎样实现?
      

  3.   

    楼主非要让想回答这个问题的人自己写CREATE TABLE, INSERT语句来搭测试环境? 或者根本不测试随便写个SQL语句?
      

  4.   

    SHOW CREATE TABLE tab_name;
      

  5.   

    假设按照时间排序后,表中的数据是这样的
    时间  数值
    00   正
    01   正
    02   负
    03   正
    04   正
    05   正
    06   负
    把表根据正负数分成两个数据集,然后对这两个数据集进行联接,由负数行组成的数据集为tbl0,取时间字段,由正数组成的数据集为tbl1,也取时间字段。然后对两个数据集进行自然连接,筛选条件是正数行的时间在相邻两个负数行时间之间,这样联接的结果就是:
    负表时间 正表时间
    02      00
    02      01
    06      03
    06      04
    06      05
    对负表时间GROUP BY后,可以得到最开始到02时间内, 有2个连续正数;在02到06时间内,有3个连续正数。困难的一步是自然联接两个数据集后如何用时间字段筛选得到需要的数据,这需要在联接前为负表添加一行最大的时间,来确保负表有一个最大的时间供正表来小于,这样能应付负行下还有正行的情况;另外,因为第一组正行的上面可能没有负行,因此在这样的情况时让正表的时间大于一个最小时间。
    select tbl0.timeColumn from
      (select timeColumn from GSYX where value<=0 
      UNION ALL select '9999-12-31 23:59:59' as timeColumn) as tbl0
      inner join
      (select timeColumn from GSYX where value>0) as tbl1
      where tbl1.timeColumn > IFNULL((select max(timeColumn) from
        (select timeColumn from GSYX where value<=0) as maxtbl0
           where maxtbl0.timeColumn <tbl0.timeColumn),'0000-00-00 00:00:00')
      and tbl1.timeColumn<tbl0.timeColumn
      group by tbl0.timeColumn
      having count(*)>=5