有结构一样的表。item_sell_20110817
item_sell_20110816
item_sell_20110815
item_sell_20110814
item_sell_20110813

结构:
item_id
item_cid
item_no
item_sell_qty
数据:
每个表都有95万条销售记录。要根据sell_qty计算每个ItemNo当天的升降幅度? 
这么多数据怎么耍啊。
或另有其它处理方案?

解决方案 »

  1.   

    贴建表及插入记录的SQL,及要求结果出来看看
    哪个字段保存日期?
      

  2.   


    (当天item_sell_qty - 昨天item_sell_qty) / 昨天item_sell_qty * 100 /% 
    不是这么算么? 
      

  3.   

    没有日期啊。日期在表名上啊。
    CREATE TABLE IF NOT EXISTS `item_sell_20110817` (
      `item_id` int(15) NOT NULL auto_increment,
      `item_cid` int(15) NOT NULL,
      `item_no` varchar(15) NOT NULL,
      `item_sell_qty` int(8) NOT NULL,
      PRIMARY KEY  (`item_id`),
      UNIQUE KEY `item_cid` (`item_cid`,`item_no`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=900001 ;--
    -- 转存表中的数据 `item_sell_20110817`
    --INSERT INTO `item_sell_20110817` (`item_id`, `item_cid`, `item_no`, `item_sell_qty`) VALUES
    (900000, 113511, '131353417', 7773);应该是这样。表不在我这电脑
      

  4.   

    示例:
    select *,(b.item_sell_qty-a.item_sell_qty)/a.item_sell_qty *100
    from item_sell_20110816 a inner join item_sell_20110817 b on a.itemno=b.itemno
      

  5.   

    or
    DELIMITER $$DROP PROCEDURE IF EXISTS `dd`$$CREATE DEFINER=`root`@`localhost` PROCEDURE `dd`(adate1 DATE,adate2 DATE)
    BEGIN
    WHILE adate1<adate2 DO
    SET @asql=CONCAT('select *,(b.item_sell_qty-a.item_sell_qty)/a.item_sell_qty *100 from item_sell_',DATE_FORMAT(adate1,'%Y%m%d'),
    ' a inner join item_sell_',DATE_FORMAT(adate1+INTERVAL 1 DAY,'%Y%m%d'),' b on a.itemno=b.itemno');
    SELECT @asql;
    PREPARE stml FROM @asql;
    EXECUTE stml;
    SET adate1=adate1+INTERVAL 1 DAY;
    END WHILE;
    END$$DELIMITER ;
    CALL dd('2011-8-8','2011-8-10')
    自行修改
      

  6.   

    谢谢WWWWA。我测试后再看看了
      

  7.   

    select itemNo,min(qty),max(qty)
    from tb
    group by ItemNo
      

  8.   

    搞定了。谢谢各位。就UPDATE下下就好了