比如:
表名; ta
字段: id, str ,max ddate
如果 存在 同一天 str 相同的记录 max 可以不相同 就删除先录入的记录
比如:
id str max ddate
---- ---- --- -----
5 你好 5 2006-7-25 15:46:008 你好 6 2006-7-25 16:01:00
就把id=5得记录删除
请高手帮忙 希望你们都看清楚了。 id 是主键
表名; ta
字段: id, str ,max ddate
如果 存在 同一天 str 相同的记录 max 可以不相同 就删除先录入的记录
比如:
id str max ddate
---- ---- --- -----
5 你好 5 2006-7-25 15:46:008 你好 6 2006-7-25 16:01:00
就把id=5得记录删除
请高手帮忙 希望你们都看清楚了。 id 是主键
from ta a (select max(id) as id from ta group by str) b
where a.id <> b.id
where id in (select min(id) from ta group by str,convert(varchar(10),ddate,120) having count(*)>1)
select * from ta
from ta a ,(select max(id) as id from ta group by str) b
where a.id <> b.id
from ta a ,(select max(id) as id from ta group by str,convert(varchar(10),ddate,120)) b
where a.id <> b.id
delete ta where [id] not in (select max([id]) from ta group by [str])
delete ta where [id] not in (select max([id]) from ta group by [str],convert(char(08),ddate,112))
这种方法好多!LouisXIV(夜游神)
jjhlover(菜菜)
playwarcraft(三角褲叉叉的頂點) 的都是可以的!总体来说,playwarcraft(三角褲叉叉的頂點) 的应该是最好的。
convert(char(08),ddate,112)) 这个我怎么都没有用过,什么意思?
convert(char(08),ddate,112)) 这个我怎么都没有用过,什么意思?convert函数,数据类型转换函数,具体参见联机帮助。执行:
select convert(char(08),getdate(),112)
--结果--
20060725
表名; ta
字段: id, str,str1 ,max ddate
如果 存在 同一天 str和 “str1” 都 相同的记录 max 可以不相同 就删除先录入的记录
比如:
id str str1 max ddate
---- ---- ---- --- -----
5 你好 我好 5 2006-7-25 15:46:008 你好 我好 6 2006-7-25 16:01:00
就把id=5得记录删除
请高手帮忙 希望你们都看清楚了。 id 是主键
比如ddate是2006-07-25 16:30:30,而你要同一天的,所以只要前面的date,而不要後面的time.
這樣convert後是20060725 也就只有"天"了.
當然那個112是顯示格式,具體可以參考 SQL的<線上說明>另外, 如果同一天的相同紀錄有3條,LouisXIV夜大俠的不知道會不會出錯.
-----------------------------
在group by 後面加上這個欄位就可以了;delete ta where [id] not in (select max([id]) from ta group by [str],[str1],convert(char(08),ddate,112))
真谢谢你。昨天帮我解决一个难题,今天又帮了我。
谢谢。等你回复我就结贴
你在哪个地方?
其中 playwarcraft(三角褲叉叉的頂點) ( )
LouisXIV(夜游神) 是对的
jjhlover(菜菜) ( ) 全部给删除了 今天的都没有了
其中112 是让格式为:yymmdd