2011-12-02 50 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

相關問題