例如这是表table1
date表示时间 字段 c ,d下面都是数值
date c d
09:35:00 245 524
09:36:00 234 42409:37:00 423 677
09:38:00 323 2342.......10:35:00 313 323
10:36:00 323 452
10:37:00 432 34210:38:00 532 344
希望给出详细的语句,谢谢
检测表中是否存在连续不间断5次d-c的差是否大于0
date表示时间 字段 c ,d下面都是数值
date c d
09:35:00 245 524
09:36:00 234 42409:37:00 423 677
09:38:00 323 2342.......10:35:00 313 323
10:36:00 323 452
10:37:00 432 34210:38:00 532 344
希望给出详细的语句,谢谢
检测表中是否存在连续不间断5次d-c的差是否大于0
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式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)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
时间 数值
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