这个查询语句,希望高手来处理

小丁丁1999 发布于 2016/08/13 17:34
阅读 237
收藏 1
V表
id      v          date
1      v11      2011-01-01
2      v12      2012-01-01
3      v13      2013-01-01
4     v14       2014-01-01
5      v16      2016-01-01


B表
id         b               c                       date
1          b11          c11                  2011-01-01
2          b12          c12                  2012-01-01
3          b13          c13                  2013-01-01
4          b14          c14                  2014-01-01
5          b15          c15                  2015-01-01
6          b16          c16                  2016-01-01



select
(select avg(b) from B where  b.date>=V.datemin and b.date<V.datemax)
from
V


其中V.datemin为V表date最小值,V.datemax为V表date最大值,V,B表无任何关联,上面本人提供的sql语句最好怎么写?
加载中
0
ldl123292
ldl123292
V.datemin和V.datemax 的问题么
小丁丁1999
小丁丁1999
回复 @ldl123292 : 这步解决了之后,里面的那个子查询要不要改??
ldl123292
ldl123292
回复 @草红薯 : 可以现有的表单独跑一次min和max,然后记录下来,后续插入时如果时间比最小值小或者比最大值大就更新这两个值
小丁丁1999
小丁丁1999
回复 @ldl123292 : 如果从业务处理,以我的理解一次性处理万行max,min,恐怕都会产生后续问题。不知道你能不能提供详细的方案。
ldl123292
ldl123292
回复 @草红薯 : date字段建个索引,或者是从其他方法考虑,不一定非得靠一条语句完成,可以从业务方面着手,可以在某个时候维护最大值和最小值,用的时候直接取出来之类的
小丁丁1999
小丁丁1999
回复 @ldl123292 : 那样会造成全表扫描啊
下一页
0
乌龟壳
乌龟壳
select avg(b.b)
from b, (select min(date) min_date, max(date) max_date from v) v
where b.date >= v.min_date and b.date < v.max_date



小丁丁1999
小丁丁1999
谢谢
乌龟壳
乌龟壳
回复 @草红薯 : 我们只能帮你解决语句逻辑的问题,至于怎么加索引,该不该加索引,表结构设计得合不合理,乃至是否要在程序里join而不是数据库语句上,是否这种类型的系统不该用mysql。一系列的问题只能你自己去解决,或者提供一定的报酬请人干几天解决
小丁丁1999
小丁丁1999
回复 @乌龟壳 : V和B表数据量都有1000w左右,这种子查询不知道会不会出现问题。
乌龟壳
乌龟壳
回复 @草红薯 : 啥意思?
小丁丁1999
小丁丁1999
笛卡尔积太大了咋办?
返回顶部
顶部