【发布时间】:2013-12-22 13:45:36
【问题描述】:
我有下表:
Properties
id agency_id refno
1 1 AA101
2 3 AA201
3 2 AA501
4 1 AA762
5 3 AA555
agency
agency_id agency_name priority
1 A 30
2 B 10
3 C 20
我已经在代理表中定义了每个代理的优先级:
现在我想根据排名和优先级从属性表中提取行。我想从第一个机构中提取第一行,从第二个机构中提取第一行,从第三个机构中提取第一行,依此类推。
然后是第 1 机构的第 2 行、第 2 机构的第 2 行、第 3 机构的第 2 行,依此类推。
然后我想根据每个机构的优先级对整个结果进行排序。我正在使用以下条款,但它没有给出预期的结果
select properties.id,
properties.agency_id,
IF(@prev <> properties.agency_id, @cnt := 1, @cnt := @cnt + 1) AS rank, @prev := properties.agency_id,
properties.refno
where properties.agency_id = agency.agency_id
order by agency.priority, rank
我已经加入了,它工作正常,没有错误。但我需要如下结果:
我已经在代理表中定义了每个代理的优先级。查询与联接工作正常。我需要的结果如下:
agency2 row1
agency3 row1
agency1 row1
agency2 row2
agency3 row2
agency1 row2
agency2 row3
agency3 row3
agency1 row3
根据代理表中定义的优先级和排名。
【问题讨论】:
-
如何为每个属性分配优先级?请记住,SQL 表本质上是无序的,因此需要有一个明确包含此信息的列。
-
您能否提供一张表格,说明您希望理想的结果是什么样的?我不确定我是否理解这个问题......
-
您缺少
FROM子句,添加它并改用JOIN和it will run 但不确定这是否是您要查找的内容。 -
我已经在代理表中定义了每个代理的优先级。查询与联接工作正常。我需要的结果如下:agent2 row1 agent3 row1 agent1 row1 agent2 row1 agent3 row1 agent1 row1