从另一个表中选择相应的记录,但只选择最后一个

时间:2011-12-02 17:52:45

标签: mysql

我有2个表authorsauthors_sales

authors_sales每小时更新一次,因此非常大。

我需要创建一个排名,因为我需要加入两个表(authors包含所有作者数据,而authors_sales只有销售数字)

如何根据销售人员对其进行排序的作者排名来创建最终表?

公共密钥是:authorId

我尝试使用LEFT JOIN,但我必须做错事,因为我得到了所有authors_sales表,而不仅仅是最后一个。

正确方向的任何提示都非常赞赏

2 个答案:

答案 0 :(得分:0)

如果您要查找销售的汇总数据,则需要通过authorId加入表格。有点像...

select authors.author_id, SUM(author_sales.sale_amt) as total_sales
from authors
inner join author_sales on author_sales.author_id = authors.author_id
group by authors.author_id
order by total_sales desc

然而(我无法区分你的问题上面的场景或下一个场景是否属实),如果你只是在寻找author_sales表的最大值(如果这个表中的数据已经聚合),你可以加入author_sales的嵌套查询,例如......

select author.author_id, t.sales from authors
inner join 
  (select top 1 author_sales.author_id, 
    author_sales.sale_amt, 
    author_sales.some_identifier 
  from author_sales order by some_identifier desc) t
on t.author_id = author.author_id
order by t.sales desc

some_identifier将是如何确定author_sales最新的记录,无论是插入时间的时间戳还是增量主键,但是它已设置好。根据author_sales中的数据是否已经聚合,这两个中的一个应该为你做...

答案 1 :(得分:0)

select a.*, sum(b.sales)
from authors as a
inner join authors_sales as b 
  using authorId
group by b.authorId
order by sum(b.sales) desc;


/* assuming column sales = total for each row in authors_sales */