gpt4 book ai didi

SQL 按 "weight"对记录进行排序

转载 作者:行者123 更新时间:2023-12-04 19:17:15 25 4
gpt4 key购买 nike

我们有一个系统,它按表中的“优先级”编号处理记录。我们通过表的内容定义优先级,例如

UPDATE table
SET priority=3
WHERE processed IS NULL

UPDATE table
SET priority=2
WHERE balance>50

UPDATE table
SET priority=1
WHERE value='blah'

(请忽略优先级之间可能存在“重叠”的事实:))

这工作正常 - 表按优先级顺序处理,因此首先处理列“值”为“blah”的所有行。

我的任务是添加一个选项来按可定义的“权重”对记录进行排序。例如,我们希望 50% 的处理为优先级 1、25% 的优先级为 2 和 25% 的优先级为 3。因此,从上面可以看出,在每 100 条记录中,其中 50 条记录的“值”是“等等” ",其中 25 个将是“余额”大于 50 等。

我试图弄清楚如何做到这一点:“优先级”的某种加权递增值似乎是最好的方法,但我无法理解如何对此进行编码。有人可以帮忙吗?

编辑:抱歉,应该说:这是在 MSSQL 2008 上运行的

最佳答案

总体思路是将任务收集到桶中,在整数的边界上划分:

select
task_id
from (
select
task_id,
((task_priority_order - 1) / task_priority_density) as task_processing_order
from (
select
t.task_id as task_id,
t.priority as task_priority,
row_number()
over (partition by t.priority order by t.priority) as task_priority_order,
case
when t.priority = 3 then 50
when t.priority = 2 then 25
when t.priority = 1 then 25
end as task_priority_density
from
table t
)
)
order by task_processing_order

在从 0.0 到 0.(9) 的音调中,我们从前 50 条优先级为 3 的记录、前 25 条优先级为 2 的记录和前 25 条优先级为 1 的记录构成了 100 条记录。

从 1.0 到 1.(9) 的下一个音调代表下一个记录桶。

如果没有更多具有某个优先级值的任务,则剩余的任务将以相同的比例放入桶中。例如。如果没有足够的优先级 3 的任务,则剩余的任务将按 50/50 的比例排列。

task_id - 一些用于任务识别的代理键。

附言抱歉,我现在无法测试此查询,因此非常感谢任何语法更正。

更新:根据评论更正查询语法。

关于SQL 按 "weight"对记录进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7927329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com