我写多几个数据吧:
Id1 Id2 date1 date2
1 0 2002-1-1 2002-1-2
2 1 2002-2-2 2002-1-3
3 1 2002-1-20 2002-1-4
4 1 2002-1-3 2002-2-3
5 0 2002-2-1 2002-1-5
6 5 2002-2-2 2002-1-6
7 5 2002-2-3 2002-1-7
变成:
Id1 Id2 date1 date2
1 0 2002-2-3 2002-1-2
2 1 2002-2-3 2002-1-3
3 1 2002-2-3 2002-1-4
4 1 2002-2-3 2002-1-5
5 0 2002-1-7 2002-1-5
6 5 2002-1-7 2002-1-6
7 5 2002-1-7 2002-1-7
Id1 Id2 date1 date2
1 0 2002-1-1 2002-1-2
2 1 2002-2-2 2002-1-3
3 1 2002-1-20 2002-1-4
4 1 2002-1-3 2002-2-3
5 0 2002-2-1 2002-1-5
6 5 2002-2-2 2002-1-6
7 5 2002-2-3 2002-1-7
变成:
Id1 Id2 date1 date2
1 0 2002-2-3 2002-1-2
2 1 2002-2-3 2002-1-3
3 1 2002-2-3 2002-1-4
4 1 2002-2-3 2002-1-5
5 0 2002-1-7 2002-1-5
6 5 2002-1-7 2002-1-6
7 5 2002-1-7 2002-1-7
Id1 Id2 date1 date2
1 0 2002-1-1 2002-1-2
2 1 2002-2-2 2002-1-3
3 1 2002-1-20 2002-1-4
4 1 2002-1-3 2002-2-3
5 0 2002-2-1 2002-1-5
6 5 2002-2-2 2002-1-6
7 5 2002-2-3 2002-1-7
变成:
Id1 Id2 date1 date2
1 0 2002-2-3 2002-1-2
2 1 2002-2-3 2002-1-3
3 1 2002-2-3 2002-1-4
4 1 2002-2-3 2002-1-5
5 0 2002-1-7 2002-1-5
6 5 2002-1-7 2002-1-6
7 5 2002-1-7 2002-1-7
SET date1=(SELECT MAX date2 FROM table1 WHERE id2=a.id2 or id2=a.id1)
FROM table1 a
WHERE ID2=0 OR ID2 IN (SELECT id1 FROM table1 WHERE Id2=0)
SET date1=(SELECT MAX(date2) FROM table1 WHERE (id2<>0 and id2=a.id2) or (id2=0 and id2=a.id1))
FROM table1 a
WHERE ID2=0 OR ID2 IN (SELECT id1 FROM table1 WHERE Id2=0)
UPDATE table1
SET date1=(SELECT MAX date2 FROM table1 WHERE id2=a.id2 or id2=a.id1)
FROM table1 a
1 0 2002-1-1 2002-1-2
2 1 2002-2-2 2002-1-3
3 1 2002-1-20 2002-1-4
4 1 2002-1-3 2002-1-10
5 0 2002-2-1 2002-1-5
6 5 2002-2-2 2002-1-6
7 5 2002-2-3 2002-2-7
你的结果变成:
Id1 Id2 date1 date2
1 0 2002-2-7 2002-1-2
2 1 2002-2-7 2002-1-3
3 1 2002-2-7 2002-1-4
4 1 2002-2-7 2002-1-10
5 0 2002-2-7 2002-1-5
6 5 2002-2-7 2002-1-6
7 5 2002-2-7 2002-2-7搂主要求的结果:
Id1 Id2 date1 date2
1 0 2002-1-10 2002-1-2
2 1 2002-1-10 2002-1-3
3 1 2002-1-10 2002-1-4
4 1 2002-1-10 2002-1-10
5 0 2002-2-7 2002-1-5
6 5 2002-2-7 2002-1-6
7 5 2002-2-7 2002-2-7
Id1 Id2 date1 date2
1 0 2002-2-7 2002-1-2
2 1 2002-1-10 2002-1-3
3 1 2002-1-10 2002-1-4
4 1 2002-1-10 2002-1-10
5 0 2002-2-7 2002-1-5
6 5 2002-2-7 2002-1-6
7 5 2002-2-7 2002-2-7
id1 int,
id2 int,
date1 datetime,
date2 datetime
)insert #t values (1, 0, '2002-1-1','2002-1-2')
insert #t values (2, 1, '2002-2-2', '2002-1-3' )
insert #t values (3 , 1 , '2002-1-20', '2002-1-4' )
insert #t values (4 , 1 , '2002-1-3' , '2002-1-10' )
insert #t values (5 , 0 , '2002-2-1' , '2002-4-5' )
insert #t values (6 , 5 , '2002-2-2' , '2002-1-6' )
insert #t values (7 , 5 , '2002-2-3' , '2002-2-7')
UPDATE #t
SET date1=(SELECT MAX(date2) FROM #t WHERE id2=a.id2 or id2=a.id1)
FROM #t a
WHERE ID2=0 OR ID2 IN (SELECT id1 FROM #t WHERE Id2=0)select * from #t结果:id1 id2 date1 date2
----------- ----------- --------------------------- ---------------------------
1 0 04 5 2002 12:00AM 01 2 2002 12:00AM
2 1 01 10 2002 12:00AM 01 3 2002 12:00AM
3 1 01 10 2002 12:00AM 01 4 2002 12:00AM
4 1 01 10 2002 12:00AM 01 10 2002 12:00AM
5 0 04 5 2002 12:00AM 04 5 2002 12:00AM
6 5 02 7 2002 12:00AM 01 6 2002 12:00AM
7 5 02 7 2002 12:00AM 02 7 2002 12:00AM (7 row(s) affected)我的语句也有错误,应该改为:UPDATE table1
SET date1=(SELECT MAX(date2) FROM table1 WHERE (a.id2<>0 and id2=a.id2) or (a.id2=0 and id2=a.id1))
FROM table1 a结果:id1 id2 date1 date2
----------- ----------- --------------------------- ---------------------------
1 0 01 10 2002 12:00AM 01 2 2002 12:00AM
2 1 01 10 2002 12:00AM 01 3 2002 12:00AM
3 1 01 10 2002 12:00AM 01 4 2002 12:00AM
4 1 01 10 2002 12:00AM 01 10 2002 12:00AM
5 0 02 7 2002 12:00AM 04 5 2002 12:00AM
6 5 02 7 2002 12:00AM 01 6 2002 12:00AM
7 5 02 7 2002 12:00AM 02 7 2002 12:00AM (7 row(s) affected)
UPDATE test2
SET date1=(SELECT MAX(date2) FROM test2 WHERE id2=a.id2 or id2=a.id1)
FROM test2 a
id1 id2 date1 date2
----------- ----------- ------------------------------------------------------ ------------------------------------------------------
1 0 2002-01-01 00:00:00.000 2002-01-02 00:00:00.000
2 1 2002-02-02 00:00:00.000 2002-01-03 00:00:00.000
3 1 2002-01-20 00:00:00.000 2002-01-04 00:00:00.000
4 1 2002-01-03 00:00:00.000 2002-01-10 00:00:00.000
5 0 2002-02-01 00:00:00.000 2002-01-05 00:00:00.000
6 5 2002-02-02 00:00:00.000 2002-01-06 00:00:00.000
7 5 2002-02-03 00:00:00.000 2002-01-07 00:00:00.000(7 row(s) affected)id1 id2 date1 date2
----------- ----------- ------------------------------------------------------ ------------------------------------------------------
1 0 2002-01-10 00:00:00.000 2002-01-02 00:00:00.000
2 1 2002-01-10 00:00:00.000 2002-01-03 00:00:00.000
3 1 2002-01-10 00:00:00.000 2002-01-04 00:00:00.000
4 1 2002-01-10 00:00:00.000 2002-01-10 00:00:00.000
5 0 2002-01-07 00:00:00.000 2002-01-05 00:00:00.000
6 5 2002-01-07 00:00:00.000 2002-01-06 00:00:00.000
7 5 2002-01-07 00:00:00.000 2002-01-07 00:00:00.000(7 row(s) affected)
UPDATE test2
SET date1=(SELECT MAX(convert(char(10),date2,20)) FROM test2 WHERE id2=a.id2 or id2=a.id1)
FROM test2 a
1 0 2002-1-1 2002-1-2
2 1 2002-2-2 2002-1-3
3 1 2002-1-20 2002-1-4
4 1 2002-1-3 2002-1-10
5 0 2002-2-1 2002-4-5
6 5 2002-2-2 2002-1-6
7 5 2002-2-3 2002-2-7