现在要根据时间来叠代插入数据,
表中内容如下(两个字段:用户,时间,日期):
a,2010-1-12 12:12:43,2010-1-12
b,2010-1-12 14:19:31,2010-1-12
a,2010-1-13 14:19:31,2010-1-13
......
每个用户每天最多只有一条记录,如果前一天有这个用户的记录,第二天却没有,就把第一天的数据插入到第二天中。执行后结果如下:
a,2010-1-12 12:12:43,2010-1-12
b,2010-1-12 14:19:31,2010-1-12
a,2010-1-13 14:19:31,2010-1-13
b,2010-1-12 14:19:31,2010-1-13
......
依次类推
请教下:)谢谢,执行效率高些就好。

解决方案 »

  1.   

    是要插入记录到表中,还是仅在查询结果中显示?另外 建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  2.   


    mysql> select * from test;
    +----------+---------------------+------------+
    | username | dtime               | ddate      |
    +----------+---------------------+------------+
    | a        | 2010-01-12 12:12:43 | 2010-01-12 |
    | b        | 2010-01-12 14:19:31 | 2010-01-12 |
    | a        | 2010-01-13 14:19:31 | 2010-01-13 |
    +----------+---------------------+------------+
    3 rows in set (0.00 sec)mysql> insert into test
        -> select t1.* from
        -> (select username,dtime,date_add(ddate,interval 1 day) dd
        -> from test) t1
        -> where not exists
        -> (select 1 from test where username=t1.username and ddate=t1.dd);
    Query OK, 2 rows affected (0.03 sec)
    Records: 2  Duplicates: 0  Warnings: 0mysql> select * from test;
    +----------+---------------------+------------+
    | username | dtime               | ddate      |
    +----------+---------------------+------------+
    | a        | 2010-01-12 12:12:43 | 2010-01-12 |
    | b        | 2010-01-12 14:19:31 | 2010-01-12 |
    | a        | 2010-01-13 14:19:31 | 2010-01-13 |
    | b        | 2010-01-12 14:19:31 | 2010-01-13 |
    | a        | 2010-01-13 14:19:31 | 2010-01-14 |
    +----------+---------------------+------------+
    5 rows in set (0.00 sec)
      

  3.   


    SELECT C.用户,C.日期,IF(D.用户 IS NULL,(SELECT 时间 FROM TT3 WHERE 用户=C.用户 AND 日期=C.日期- INTERVAL 1 day),D.时间) AS NEWSJ
    FROM 
    (SELECT * FROM 
    (SELECT DISTINCT 日期 FROM TT3) A,(SELECT DISTINCT 用户 FROM TT3) B) C
    LEFT JOIN TT3 D ON  C.用户=D.用户 AND C.日期=D.日期