请教高手,权重查询的SQL语句

shuncy 2007-01-21 11:52:16
有一张表tab如下:
create table tab
{
id int,
name varchar(20),
priority int, --优先级
rate int --同优先级权重
}
它有一张明细表tab_sub
create table tab_sub
{
id int,
num varchar(20)
}

tab_sub的ID是和主表关联的,数据如下:
tab
id name priority rate
1 aa 3 3
2 bb 3 4
3 cc 2 1
4 ddd 3 1
5 eee 2 5
6 ff 3 3

tab_sub表的话记录可多可少,如下:
id num
1 111111
1 222222
1 33333
2 1111
2 22222
3 1112
4 443322
5 11223
5 6544444
6 3333333

要求如下,写一个SQL或过程,指定需要取的条数,如6条,优先取优先级高(数字越低优先级越高)的任务,其次,在同优先级的任务中根据rate的值(权重)来判断取多取少,
如果不足则从下一优先级中取出凑足指定的数字,取得的结果如下
id num name priority rate
5 11223 eee 2 3
5 6544444 eee 2 3
3 1112 cc 2 1
2 1111 bb 3 4
6 333333 ff 3 3
1 111111 aa 3 3

基本上就是要实现这样的查询,实际的情况还要复杂,还要优先考虑tab_sub表中的子项数量,如果tab_sub中相同权重的任务,tab_sub中的子项总数小于当前能分配的数量的话,那么应该优先将此任务的子项取出来,
各位高手有没有好的实现办法,重要的是速度要足够快~
...全文
387 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuncy 2007-01-23
  • 打赏
  • 举报
回复
再顶一下......
shuncy 2007-01-22
  • 打赏
  • 举报
回复
因为任务是一个主从表的模式,主表中记录了任务的一些主要信息,从表记录了实际要取出的任务号码,所以主表中会有一个rate的值,用来区分同优先级的任务哪些可以多取一些,哪些可以少取一些,以让更重要的任务(rate值大的任务)快速的取出执行,同时也不影响相对(rate值少的)任务的执行,所以如果有多个任务同时存在,那么这个任务的执行百分比可以看作是多个任务的rate值的总和,除以当前的rate值,也就是刚才所写的:对于每个任务,实际分配的数量为:
num=tot*(rate/sum(rate))
tot就是实际要取的任务数,num的结果就是对于当前任务可取的任务数
这样说明白了么?
marco08 2007-01-22
  • 打赏
  • 举报
回复
還是不明白
shuncy 2007-01-22
  • 打赏
  • 举报
回复
在同优先级的任务中根据rate的值(权重)来判断取多取少

==
這句看不懂
其实rate的值就是同一个优先级的任务中取的一个比例,比如有五个任务,rate值分别为:
2,3,1,4,5
那么你可以把他们取的比例分别看为:
2/(2+3+1+4+5),3/(2+3+1+4+5),1/(2+3+1+4+5),4/(2+3+1+4+5),5/(2+3+1+4+5)
这样不知道明白了没?
ReViSion 2007-01-22
  • 打赏
  • 举报
回复
看不明白要什么
sheqiergao 2007-01-22
  • 打赏
  • 举报
回复
能不能先把主表按优先级和权重排序,然后 输入到临时表中,在临时表中取出前6条?
marco08 2007-01-22
  • 打赏
  • 举报
回复
在同优先级的任务中根据rate的值(权重)来判断取多取少

==
這句看不懂
stou 2007-01-22
  • 打赏
  • 举报
回复
顶哈子
feixiangVB 2007-01-22
  • 打赏
  • 举报
回复
顶哈子~~~
zzxiaoma 2007-01-22
  • 打赏
  • 举报
回复
关注
shuncy 2007-01-22
  • 打赏
  • 举报
回复
:(~~~~UP一下....

34,587

社区成员

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

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