求教一个问题,SQL循环执行

wrd74 2011-11-07 09:30:52
问题:我有一个表,其中一个是日期字段,

date 字段
2011-01-01   xxx
2011-01-01 xxx
2011-01-01
2011-01-02
2011-01-02
....
.....
2011-11-07

我现在想按日期进行删除 ,只删除一天当中记录数的固定百分比,从2011-01-01 一直执行到2011-11-07,每天的记录数是不固定的,怎么写,谢谢

在线等
...全文
95 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
geniuswjt 2011-11-08
  • 打赏
  • 举报
回复
赞成,很少用的一个函数
终于派上用场了
LZ注意2005+才能用[Quote=引用 7 楼 roy_88 的回复:]

SQL code
这方法比较好用的方法NTILE()--按百分比删除

--> --> (Roy)生成測試數據

if not object_id('Tempdb..#T') is null
drop table #T
Go
Create table #T([date] Datetime)
Insert #T
select '2011-01-01' union all
select ……
[/Quote]
iymmgd 2011-11-07
  • 打赏
  • 举报
回复
学了
中国风 2011-11-07
  • 打赏
  • 举报
回复
按天数分组,删除每天80%,以上例子
中国风 2011-11-07
  • 打赏
  • 举报
回复
这方法比较好用的方法NTILE()--按百分比删除

--> --> (Roy)生成測試數據

if not object_id('Tempdb..#T') is null
drop table #T
Go
Create table #T([date] Datetime)
Insert #T
select '2011-01-01' union all
select '2011-01-01' union all
select '2011-01-01' union all
select '2011-01-01' union all
select '2011-01-01' union all
select '2011-01-01' union all
select '2011-01-01' union all
select '2011-01-01' union all
select '2011-01-01' union all
select '2011-01-01' union all
select '2011-01-02' union all
select '2011-01-02'
Go
delete t
from
(Select *,NTILE(10)over(partition by [date] order by [date]) as row from #T)t
where row<=8---删除80%

select * from #T
--小F-- 2011-11-07
  • 打赏
  • 举报
回复
固定百分比是哪个字段?
wrd74 2011-11-07
  • 打赏
  • 举报
回复
就是随意删除每天记录数中的固定百分比
-晴天 2011-11-07
  • 打赏
  • 举报
回复
delete from tb where id in( --id列为唯一性列
select id from(
select id,row_number()over(partition by date order by newid())rn,(select count(*) from tb where date=a.date)ct from tb a
)t where rn*100/ct<=80 --删除80%
快溜 2011-11-07
  • 打赏
  • 举报
回复
啥意思
-晴天 2011-11-07
  • 打赏
  • 举报
回复
你的表中,必定还有一个可以用来区分各行的列,如果有,按可以随机删除.
--小F-- 2011-11-07
  • 打赏
  • 举报
回复
需要得到的结果是什么?

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧