2011-12-02 25 views
0

我有2个表authorsauthors_sales从另一个表中选择相应的记录,但刚刚过去的一个

authors_sales是每小时更新一次如此巨大的表格。

我需要做的是建立一个名次,为此我需要加入两个表(authors有所有作者的数据,同时authors_sales刚刚销售数字)

如何创建一个决赛桌的排名作者是通过销售订购的?

常见的关键是:authorId

我LEFT JOIN试过,但我必须做一些错误的,因为我得到的所有authors_sales表,而不是刚刚过去的。

在大加赞赏

回答

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中的数据是否已经聚合,这两个中的一个应该为你做...

+0

谢谢!第一个场景是我没有使用SUM查找的场景,因为表authors_sales的总和已经作为输入。我之前尝试过但没有“group by”,我想这是我失踪的关键,谢谢! – JordanBelf

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 */ 
+0

非常感谢!有效! – JordanBelf

相关问题