现在要根据时间来叠代插入数据,
表中内容如下(两个字段:用户,时间,日期):
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
......
依次类推
请教下:)谢谢,执行效率高些就好。
表中内容如下(两个字段:用户,时间,日期):
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
......
依次类推
请教下:)谢谢,执行效率高些就好。
参考一下这个贴子的提问方式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)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
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)
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.日期