mysql 补全所有维度

水儿 发布于 2013/12/10 16:30
阅读 606
收藏 0
我的数据表统计到的数据是这样的-----第一天有1,2,3三个省份有数据,第二天1,4两个省份有数据。我现在想写一个存储过程把2,3两个省份的数据补全到第二天的时间里,表结构如下
CREATE TABLE `stat_user_active_day` (
   `id` bigint(20) NOT NULL auto_increment,
   `cityId` bigint(11) NOT NULL COMMENT '城市id',
   `provinceId` bigint(11) NOT NULL COMMENT '省id',
   `mobileType` smallint(3) default NULL COMMENT '客户端操作系统类型',
   `activeTime` bigint(20) NOT NULL COMMENT '日期',
   `userNum` bigint(20) default NULL COMMENT '日活跃用户数',
   `allUserNumber` bigint(20) default NULL COMMENT '累计用户(由计算获取)',
   PRIMARY KEY  (`id`),
   KEY `cityId_idx` (`cityId`),
   KEY `mobileType_idx` (`mobileType`),
   KEY `provinceId_idx` (`provinceId`),
   KEY `activeTime_idx` (`activeTime`)

 ) ENGINE=MyISAM DEFAULT CHARSET=utf8

写的存储过程里面的主要部分如下

方法一:

INSERT INTO stat_user_active_day(mobileType, cityId, provinceId, activeTime)
SELECT mobileType, cityId, provinceId, activeTime FROM 
(SELECT DISTINCT activeTime FROM stat_user_active_day  WHERE activeTime >=1384012800000 AND activeTime <=1384012800000) a,
(SELECT DISTINCT mobileType, cityId, provinceId FROM stat_user_active_day) b 
WHERE CONCAT(mobileType, cityId, provinceId, activeTime) NOT EXISTS (SELECT CONCAT(mobileType, cityId, provinceId, activeTime) FROM stat_user_active_day)

方法二:

INSERT INTO stat_user_active_day(mobileType, cityId, provinceId, activeTime) 
SELECT ab.mobileType, ab.cityId, ab.provinceId, ab.activeTime FROM 
   ( SELECT mobileType, cityId, provinceId, activeTime FROM 
      (SELECT DISTINCT activeTime FROM stat_user_active_day WHERE activeTime >=1384012800000 AND activeTime<=1384012800000) a, 
      (SELECT DISTINCT mobileType, cityId, provinceId FROM stat_user_active_day WHERE activeTime <=1384012800000) b
       ) ab LEFT JOIN stat_user_active_day ON 
ab.mobileType = stat_user_active_day.mobileType AND
ab.cityId = stat_user_active_day.cityId AND
ab.provinceId = stat_user_active_day.provinceId AND
ab.activeTime = stat_user_active_day.activeTime
      WHERE  stat_user_active_day.mobileType IS NULL
AND stat_user_active_day.cityId IS NULL
AND stat_user_active_day.provinceId IS NULL
AND stat_user_active_day.activeTime IS NULL
 

现在这两种写法的效率都超级低,大侠们帮帮忙,万分感谢!

加载中
0
泡不烂的凉粉
泡不烂的凉粉
两个都能运行? 我以为mysql 不允许对同一个表格既进行写入又进行查询的.
0
水儿
水儿

引用来自“正想着改什么名好”的答案

两个都能运行? 我以为mysql 不允许对同一个表格既进行写入又进行查询的.
都可以,只是效率不高
返回顶部
顶部