急急急,求sql大神帮忙解决

各位大神们,现在有两张表realtime(send_time,range,oil)和gps(send_time,speed),我要把这两张表的数据汇总到sum表中,sum表的字段有year,month,day,hour,max(range)-min(range),avg(oil),max(speed),avg(speed),sum表记录的是每小时的数据,年月日小时就是send_time里面的,前两张表是每10秒的数据,他们每条数据都是一一对应的,sum表用的是是组合主键,有年月日小时这4个主键,我用的mysql,达到这一操作的sql语句要怎么写啊,我之前想写成一条,总写不好,后来分2条写,第二个update语句又不知道怎么写了,谢谢帮助我的各位大神

5个回答

加上left join拼接呢
select a.* ,b.* from
(SELECT YEAR(r.send_time) y,MONTH(r.send_time) m,DAY(r.send_time) d,HOUR(r.send_time) h,
max(r.driving_range)-min(r.driving_range) r,avg(r.avg_oil_a) o
FROM realtime r GROUP BY DATE_FORMAT(r.sending_time,'%Y-%m-%d %H')) AS a
LEFT JOIN
(
SELECT YEAR(g.send_time) y,MONTH(g.send_time) m,DAY(g.send_time) d,HOUR(g.send_time) h,
max(g.speed) ms,avg(g.speed) avs
FROM gps g GROUP BY DATE_FORMAT(g.sending_time,'%Y-%m-%d %H') ) AS b
on a.y = b.y and a.m= b.m and a.h=b.h and a.d=b.d

qq_30661027
qq_30661027 又跑了一遍,1分钟查询完了,300万条数据,慢不慢啊,大神
3 年多之前 回复
qq_30661027
qq_30661027 100W左右还行,300W会内存溢出。。。
3 年多之前 回复
wanglei19880622
小小农民 回复qq_30661027: 那就10000条运行一下,循环运行个300次,时间久点
3 年多之前 回复
qq_30661027
qq_30661027 感谢你的帮忙,感觉这样会内存溢出啊,我试试,300W条数据
3 年多之前 回复

从2张表中提取相应数据,然后对应拼成一条SQL插入呗

qq_30661027
qq_30661027 没有想象的那么简单吧,两条查询sql语句分别是: SELECT YEAR(r.send_time),MONTH(r.send_time),DAY(r.send_time),HOUR(r.send_time), max(r.driving_range)-min(r.driving_range),avg(r.avg_oil_a) FROM realtime r GROUP BY DATE_FORMAT(r.sending_time,'%Y-%m-%d %H') SELECT YEAR(g.send_time),MONTH(g.send_time),DAY(g.send_time),HOUR(g.send_time), max(g.speed),avg(g.speed) FROM gps g GROUP BY DATE_FORMAT(g.sending_time,'%Y-%m-%d %H') 其中年月日时是一致的,怎么拼?
3 年多之前 回复

没有想象的那么简单吧,两条查询sql语句分别是:
SELECT YEAR(r.send_time),MONTH(r.send_time),DAY(r.send_time),HOUR(r.send_time),
max(r.driving_range)-min(r.driving_range),avg(r.avg_oil_a)
FROM realtime r GROUP BY DATE_FORMAT(r.sending_time,'%Y-%m-%d %H')

SELECT YEAR(g.send_time),MONTH(g.send_time),DAY(g.send_time),HOUR(g.send_time),
max(g.speed),avg(g.speed)
FROM gps g GROUP BY DATE_FORMAT(g.sending_time,'%Y-%m-%d %H')
其中年月日时是一致的,怎么拼?

加上left join拼接呢
select a.* ,b.* from
(SELECT YEAR(r.send_time) y,MONTH(r.send_time) m,DAY(r.send_time) d,HOUR(r.send_time) h,
max(r.driving_range)-min(r.driving_range) r,avg(r.avg_oil_a) o
FROM realtime r GROUP BY DATE_FORMAT(r.sending_time,'%Y-%m-%d %H')) AS a
LEFT JOIN
(
SELECT YEAR(g.send_time) y,MONTH(g.send_time) m,DAY(g.send_time) d,HOUR(g.send_time) h,
max(g.speed) ms,avg(g.speed) avs
FROM gps g GROUP BY DATE_FORMAT(g.sending_time,'%Y-%m-%d %H') ) AS b
on a.y = b.y and a.m= b.m and a.h=b.h and a.d=b.d

首先鄙视楼主,字段命名太混乱了,你看下这个能否正常运行

insert into sum select YEAR(r.send_time),MONTH(r.send_time),DAY(r.send_time),HOUR(r.send_time),max(r.range)-min(r.range),
avg(r.oil),max(g.speed),avg(g.speed) from realtime r,gps g where r.send_time=g.send_time
GROUP BY DATE_FORMAT(r.send_time,'%Y-%m-%d %H')

qq_30661027
qq_30661027 回复u010681318: 嗯,我建了索引的,准备用楼上说的left join,还是得1分钟,其实300万条数据不算多。。。
3 年多之前 回复
u010681318
水塘月色 回复qq_30661027: 我在表中插入了几条记录尝试了下是可以的,百万数量级的记录啊,你要优化啊,不然普通的查询都要好久的
3 年多之前 回复
qq_30661027
qq_30661027 多谢你的帮忙,字段名我还是简化了的,其实还有很多,我试了一下,只执行后面的查询,4分钟还没查完,300W条数据
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!