工作中遇到的,,叙述比较长,,望耐心看完,,共勉,,,
现把具体情况叙述如下:
有两个表,表A(监测点信息表),表B(监测点实时数据表)
表A中,字段有监测点名称,监测点编码之类的监测点信息,基本是固定不变,除非人为增加或减少
表B中,字段前半部分和表A一样,是监测点信息,后半部分则是该监测点的实时数据监测,包括得到该数据的时    间,实时监测数据是没8分钟一次,也就是每8分钟在每个监测点都会产生一个数据,总共200个监测点,数据量增长比较大
大体表结构简洁表示如下:(bl表示监测点,n表示监测点信息,t表示监测点在某时刻接收数据)
表A:
bl(1)  n(1)
bl(2)  n(2)
bl(3)  n(3)
bl(4)  n(4)
  
表B:
bl(1)  t(1)
bl(1)  t(2)
bl(1)  t(3)
....     ....
bl(2)  t(a1)
bl(2)  t(a2)
bl(2)  t(a3)
....     ....
bl(3)  t(b1)
bl(3)  t(b2)
bl(3)  t(b3)
...      ...
目标如下:
现在我要查询一些数据显示在前台,,要求是这样的,,所有buslist里的表,以及这些表的最后通讯日期(也就是每个表的t的最大值吧)显示出来,,如果有的表从没上来过数据,那么最后通讯日期就显示0
所遇问题简述:
用连接查询,,如果直接把两个表join连接查询,,然后按buscode进行group,取每个group里的t的最大值
select A.bl,max(t)from A left join B on A.bl=B.bl group by bl order by bl
但是问题来了,,因为B表随着时间增长数据特别多,,我又是远程访问数据库,,所以速度非常慢,,要等好几分钟才可以,但数据全
如果加个条件,就是取B表的某一部分(比如最近7天数据),语句如下:
select A.bl,max(t)from A left join B on A.bl=B.bl where datediff(now(),t)<7 group by bl order by bl
这样的话,,明显打开速度快很多,基本几秒钟就打开了,,但是有个问题,,就是有些监测点没有数据的或者最后一次通讯数据在7天前的就都不显示了,,,说的比较长,望大神指点啊 啊啊,,新手分数不多,,差不多都给了,莫见怪哈mysql查询连接