如何优先获得特定值

时间:2014-02-21 11:53:40

标签: sql rank

我的表格如下。

表值

ID      Values
----  ------
A1   ----  3
A2   ----  3
A3   ----  3
A4   ----  3
A5   ----  5
A6   ----  6
A7   ----  6

表优先级

ID ------ Priority
A3 ----- 1
A2 ----- 2
A1 ----- 3
A5 ----- 4
A6 ----- 5
A4 ----- 6
A7 ----- 7

我希望根据小于5的值的优先级找到最低的2值ID。 如果一个或多个ID具有相同的值,则使用优先级表中的优先级并从中获取前2个值。 对于上述情况,A1,A2,A3和A4具有相同的值并且小于5.然后它应该遵循优先级表中给出的优先级并获取前2个记录。对于上述情况,它应该显示

ID ---- Values
A3 ---- 3
A2 ---- 3

2 个答案:

答案 0 :(得分:0)

您可以通过将表连接在一起,过滤value上标准的第一个表来完成此操作。然后订购结果并选择前两个:

select v.*
from values v join
     priority p
     on v.id = p.id
where v.value < 5
order by priority
limit 2;

不同的数据库引擎有不同的方法将结果限制为2。因此,limit子句可能是其他内容,例如select top 2,具体取决于数据库。

答案 1 :(得分:0)

SELECT TOP 2 tv.ID, tv.Values 
FROM table_values tv
INNER JOIN table_priorities tp
ON tv.Id = ip.ID
WHERE tv.values < 5
ORDER BY tv.values, tp.priority