我有一个表 traffic_data 里面有字段date_time(DATETIME类型)、speed(int类型),里面是每2分钟一条数据,现在想以分钟(4分钟、8分钟、50分钟等等,只要是60以内的偶数分钟都有可能)来进行统计speed。
表结构:
date_time speed
2011-06-23 20:10:00 1
2011-06-23 20:12:00 2
2011-06-23 20:14:00 3
2011-06-23 20:14:00 1
2011-06-23 20:14:00 2
2011-06-23 20:16:00 2(特别说明:date_time可能有重复的)如:按4分钟统计,等于大于2011-06-23 20:10:00小于2011-06-23 20:14:00这段时间内speed为3。时间显示为2011-06-23 20:14:00结果:
date_time speed
2011-06-23 20:14:00 3
2011-06-23 20:18:00 8
......... ....
--------------------------------------------------------------------
另外,我用的是MySql数据库,网上说的一些方法函数MySql貌似不支持,没做出来。本人SQL一塌糊涂,诚心请教高手,万分感谢!
表结构:
date_time speed
2011-06-23 20:10:00 1
2011-06-23 20:12:00 2
2011-06-23 20:14:00 3
2011-06-23 20:14:00 1
2011-06-23 20:14:00 2
2011-06-23 20:16:00 2(特别说明:date_time可能有重复的)如:按4分钟统计,等于大于2011-06-23 20:10:00小于2011-06-23 20:14:00这段时间内speed为3。时间显示为2011-06-23 20:14:00结果:
date_time speed
2011-06-23 20:14:00 3
2011-06-23 20:18:00 8
......... ....
--------------------------------------------------------------------
另外,我用的是MySql数据库,网上说的一些方法函数MySql貌似不支持,没做出来。本人SQL一塌糊涂,诚心请教高手,万分感谢!
1、select date_time,speed from traffic_data where date_time between now()+0 and now()-(4*100)
这里的4就是你要的4分钟,但是建议做成触发器 2、如果你想找出所有的,但是都是每隔4分钟,也就是这些记录都是4分钟才发生的
如:
2011-06-23 20:10:00 1
2011-06-23 20:12:00 2
2011-06-23 20:14:00 3
2011-06-23 20:14:00 1
2011-06-23 20:14:00 2
2011-06-23 20:16:00 2使用查询后就只有:
2011-06-23 20:10:00 1
2011-06-23 20:14:00 3
2011-06-23 20:14:00 1
2011-06-23 20:14:00 2
这里请注意一定要确定起始时刻,如果没有的话就不行了。因为时间间隔都是相对的概念,刚说的例子就是从2011-06-23 20:10:00为时间基准点的,如果以2011-06-23 20:12:00为基准点的话,结果就是:
2011-06-23 20:12:00 2
2011-06-23 20:16:00 2
结果就完全不一样了....请记得! select date_time,speed from where floor(date_time+0)>20110623201000 and (abs(floor(date_time+0)-20120202110541 ) % 400)=0 order by date_time[这里400的意思就是4分钟,以2011-06-23 20:10:00为时间基准点的]
第二个SQL语句我试了,查询结果为空,
select date_time,speed from traffic_data where floor(date_time+0)>20110623201000 and (abs(floor(date_time+0)-now() ) % 400)=0 order by date_time
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式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)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
这条SQL问题出在 (abs(floor(date_time+0)-now() ) % 400)=0 取余的余数都不等于0,所有查询出来的数据为空。
-- Table structure for traffic_data
-- ----------------------------
CREATE TABLE `traffic_data` (
`irn` int(11) NOT NULL auto_increment,
`date_time` datetime default NULL,
`day_of_week` smallint(6) default NULL,
`occupancy` smallint(6) default NULL,
`flowcount` smallint(6) default NULL,
`speed` int(11) default NULL,
`det_id` char(16) NOT NULL,
`link_id` char(16) NOT NULL,
`junction_id` char(16) NOT NULL,
`region_id` char(16) NOT NULL,
PRIMARY KEY (`irn`)
) ENGINE=MyISAM AUTO_INCREMENT=41361 DEFAULT CHARSET=utf8;-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `traffic_data` VALUES ('2', '2011-06-23 20:10:00', null, '1', '1', '1', '1', '1', 'JNC066111', 'REG001000');
INSERT INTO `traffic_data` VALUES ('3', '2011-06-23 20:12:00', null, '1', '1', '1', '1', '1', 'JNC066111', 'REG001000');
INSERT INTO `traffic_data` VALUES ('4', '2011-06-23 20:14:00', null, '1', '1', '2', '2', '2', 'JNC066112', 'REG001000');
INSERT INTO `traffic_data` VALUES ('5', '2011-06-23 20:14:00', null, '1', '2', '1', '2', '2', 'JNC066112', 'REG001000');
INSERT INTO `traffic_data` VALUES ('6', '2011-06-23 20:16:00', null, '1', '3', '1', '6', '1', 'JNC066112', 'REG002000');
INSERT INTO `traffic_data` VALUES ('7', '2011-06-23 20:18:00', null, '1', '1', '1', '1', '2', 'JNC066112', 'REG002000');
INSERT INTO `traffic_data` VALUES ('1', '2011-06-23 20:20:00', '1', '1', '1', '1', '1', '1', '1', '1');
想要结果SQL语句:CREATE TABLE `traffic_data222` (
`irn` int(11) NOT NULL auto_increment,
`date_time` timestamp NULL default NULL,
`day_of_week` smallint(6) default NULL,
`occupancy` smallint(6) default NULL,
`flowcount` smallint(6) default NULL,
`speed` int(11) default NULL,
`det_id` char(16) default NULL,
`link_id` char(16) default NULL,
`junction_id` char(16) default NULL,
`region_id` char(16) default NULL,
PRIMARY KEY (`irn`)
) ENGINE=MyISAM AUTO_INCREMENT=41361 DEFAULT CHARSET=utf8;-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `traffic_data222` VALUES ('1', '2011-06-23 20:14:00', null, '1', '1', '2', '1', '1', 'JNC066111', 'REG001000');
INSERT INTO `traffic_data222` VALUES ('2', '2011-06-23 20:18:00', null, null, null, '4', null, null, null, null);
INSERT INTO `traffic_data222` VALUES ('3', '2011-06-23 20:22:00', null, null, null, '1', null, null, null, null);
1) | 1 | 2011-06-23 20:14:00 | NULL | 1 | 1 | 2 | 1 | 1 | JNC066111 | REG001000 |
这条记录中的数据是怎么来的?det_id=1, link_id=1 这两个字段的计算逻辑是什么?如何得到的?2) | 2 | 2011-06-23 20:18:00 | NULL | NULL | NULL | 4 | NULL | NULL | NULL | NULL |
这条记录为什么是其它字段是NULL? speed=4 是怎么得到的?为什么和原表中的| 7 | 2011-06-23 20:18:00 的不一致?3) 2011-06-23 20:22:00 ,由于原表中并无22分的数据,如果需要显示,则需要另外一张辅助表,或者自行在程序中处理显示。